Ern*_*jal 5 c++ compiler-construction compiler-errors most-vexing-parse
我有这个简单的C++问题,这让我想重新尝试重新学习CS学位,这次尝试学习一些东西.;)
为什么这段代码不能编译:
vector<int> v(int());
v.push_back(1);
Run Code Online (Sandbox Code Playgroud)
而另一个编译没有一个警告
vector<int> v((int()));
v.push_back(1);
Run Code Online (Sandbox Code Playgroud)
甚至很难找到差异(增加了额外的括号:P).
它被称为最令人烦恼的解析.
vector<int> v(int());
Run Code Online (Sandbox Code Playgroud)
声明一个函数v,它接受一个函数(不带参数返回int)并返回一个vector<int>.这会自动"调整"为一个函数v,该函数接受一个函数指针(不返回参数int)并返回一个vector<int>.
额外的括号对禁止这种解释,因为您不能在函数声明中的参数声明符周围放置额外的括号,因此(int())只能将其解释为名为的对象的初始值设定项v.
C++有一个明确的消歧规则,int()如果它产生语法(但不一定是语义)意义,它更倾向于将事物(在这种情况下)解析为声明符而不是表达式.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |