带有多个参数的 static_cast 是怎么回事?
-
09-09-2019 - |
题
谁能告诉我这个演员有什么效果(除了将 happyNumber 设置为 1337 之外),如果有的话,如果没有其他效果,我怎么能写这样的代码???这是编译器错误,还是 C++ 的某些“隐藏功能”?
int happyNumber = static_cast<int>(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 循环的初始值设定项、条件和 continue 部分(或任何其他需要表达式的地方)计算一个表达式。不过,它通常不会产生最清晰的代码,而且语义也很奇怪。正如您所观察到的,逗号分隔的序列的计算结果是其最后一个表达式的值。
不隶属于 StackOverflow