任何人都可以告诉我这个演员有什么效果(除了设置happyNumber到1337),如果有的话,如果没有其他效果,我怎么能写这样的代码?这是编译器错误,还是C++的一些"隐藏功能"?
int happyNumber = static_cast(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);
我很惊讶这会编译.我发现它是通过一个错误,我不小心将第二个参数设置为意图进入正在转换的表达式的函数调用.这导致了一个令人讨厌的错误,其中对象是从第二个参数转换而来的,只用一个参数调用该函数.它汇编了...并且最初没有繁荣......
我正在使用Microsoft Visual C++ 2008.
静态强制转换采用一个参数,但其参数是一个表达式,表达式可以包含逗号运算符.逗号用于您想要同时评估两个或更多表达式的副作用,例如:
int i, j; for (i=0, j=0; i < 10; i++,j++) { // do stuff }
它有点用处,因为如果没有它,你只能为for循环(或任何其他需要表达式的地方)的初始值设定项,条件和继续部分计算一个表达式.但它通常不会产生最清晰的代码,语义也很奇怪.如您所见,逗号分隔的序列计算其最后一个表达式的值.