Sar*_*esh 7 c++ declaration language-lawyer
当我编译下面的代码时有一个奇怪的行为:
class Foo { }; int main() { Foo(b); }
即使没有b. 对此有什么解释吗?
b
son*_*yao 11
它本身就是一个声明。它声明了一个以btype命名的变量Foo,即与Foo b;.
Foo
Foo b;
[stmt.ambig]/1
有一个在语法涉及的歧义表达式语句小号和声明小号:一个表达式语句与函数式的显式类型转换为最左边的子表达式可以区分从一个声明,其中第一说明符与开始(。在这些情况下,该语句是一个声明。
(
和[stmt.ambig]/2
其余情况是声明s。[ 例子: class T { // ... public: T(); T(int); T(int, int); }; T(a); // declaration Run Code Online (Sandbox Code Playgroud) ...
其余情况是声明s。[ 例子:
class T { // ... public: T(); T(int); T(int, int); }; T(a); // declaration
...
归档时间:
5 年,9 月 前
查看次数:
150 次
最近记录: