在调试一些新手的代码时,我发现c ++中非常奇怪的声明实际上定义了变量。请考虑以下程序:
#include <iostream>
struct Foo {
int number;
};
int main(void) {
Foo(Bar);
std::cout<<Bar.number<<std::endl;
}
运行程序会输出一些随机整数。当然,这是因为number
未初始化。
但那不是问题。问题是上面的程序编译没有一个警告,Bar
被解释为类Foo
的变量。这意味着Foo(Bar)
相当于Foo Bar
!我之前在c ++中没有看到任何这样的声明语法。并cppreference没有帮助。任何人都可以告诉我这是否是c ++标准中的有效声明,或者只是涉及某种最令人烦恼的解析的奇怪错误?
该程序在g ++ 5.4.0上编译,在Ubuntu 16.04上。