可能重复:
为什么不能用参数构造条件中定义的变量?
考虑这个简单的例子:
/*1*/ int main() {
/*2*/ for (int i(7); i;){break;}
/*3*/ if (int i(7)) {}
/*4*/ }
为什么第 2 行编译得很好,而第 3 行给出了错误?这对我来说有点奇怪,为什么 if 语句在这方面比 for 循环更糟糕?
如果这是特定于编译器的 - 我使用gcc-4.5.1进行了测试:
prog.cpp:在函数'int main()'中:prog.cpp:3:7:错误:'int'之前的预期主表达式 prog.cpp:3:7:错误:'int'之前的预期')'
我被这个问题启发了
[更新]
我知道这编译得很好:
/*1*/ int main() {
/*2*/ for (int i = 7; i;){break;}
/*3*/ if (int i = 7) {}
/*4*/ }
[更新2]
这似乎是纯粹的学术问题 - 但这对于std::unique_ptr<>
无法复制的类型可能非常重要:
#include <memory>
int main() {
if (std::unique_ptr<int> i = new (std::nothrow) int(7)) {
}
if (std::unique_ptr<int> i(new (std::nothrow) int(7))) {
}
}
这两种都不允许。不确定新的 C++11 语法{}
?