关于c ++的奇怪宣言

时间:2018-06-06 09:07:12

标签: c++

在调试一些新手的代码时,我发现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上。

0 个答案:

没有答案