nih*_*har 17 c++ class variable-initialization function-declaration
a为a a1(),它不会引发错误,但不会调用构造函数.为什么会这样?我的代码:
#include<iostream>
using namespace std;
class a
{
public:
a()
{
cout << "in a\n";
}
};
int main()
{
a a1();
a a;
}
Run Code Online (Sandbox Code Playgroud)
aar*_*man 21
当你编写a a1();它实际上被解析为函数声明而不是对默认构造函数的调用.
a a1;
将正确调用默认构造函数
当你编写a a;它时,因为变量名在所谓的名称隐藏中优先于类名,但是即使它起作用,它只会导致混淆,我会避免这样做.
对于那些喜欢标准报价的人来说,你去吧
类名(9.1)或枚举名(7.2)可以通过在同一范围内声明的变量,数据成员,函数或枚举器的名称隐藏.如果类或枚举名称和变量,数据成员,函数或枚举器在同一作用域(按任何顺序)中声明具有相同名称,则类或枚举名称将隐藏在变量,数据成员,函数或枚举器名称可见.
a a1(); 是一个函数声明.
这是在C++ 11中创建统一初始化的重要原因.要使用C++ 11中的构造函数初始化对象,请使用a a1{};
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |