13

谁能告诉我这个演员有什么效果(除了将happyNumber设置为1337),如果有的话,如果没有其他效果,我怎么能写这样的代码???这是编译器错误,还是 C++ 的某些“隐藏功能”?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

我很惊讶这会编译。我是通过一个错误发现的,在该错误中,我不小心将第二个参数设置为要在被强制转换的表达式的函数调用中使用的东西。这导致了一个令人讨厌的错误,其中对象是从第二个参数强制转换的,只使用一个参数调用函数。它编译了......并且最初并没有繁荣......

我正在使用 Microsoft Visual C++ 2008。

4

1 回答 1

30

静态转换接受一个参数,但它的参数是一个表达式,并且表达式可以包含逗号运算符。逗号用于您想要一次评估两个或多个表达式的副作用的情况,例如:

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

它有点有用,因为没有它,您只能为 for 循环的初始化程序、条件和继续部分(或任何其他需要表达式的地方)计算一个表达式。但是,它通常不会产生最清晰的代码,而且语义也很奇怪。正如您所观察到的,逗号分隔的序列计算为其最后一个表达式的值。

于 2009-02-27T09:54:28.510 回答