gpt4 book ai didi

c++ - 为什么 Foo(b) 在 C++ 中编译成功?

转载 作者:行者123 更新时间:2023-12-01 12:40:29 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Visual Studio C++ compiler weird behaviour

(2 个回答)


去年关闭。




当我编译下面的代码时有一个奇怪的行为:

class Foo {
};
int main() {
Foo(b);
}

即使没有声明 b 也能成功编译.
对此有什么解释吗?

最佳答案

它本身就是一个声明。它声明了一个名为 b 的变量。带类型 Foo ,即与 Foo b; 相同的效果.

[stmt.ambig]/1

There is an ambiguity in the grammar involving expression-statements and declarations: An expression-statement with a function-style explicit type conversion as its leftmost subexpression can be indistinguishable from a declaration where the first declarator starts with a (. In those cases the statement is a declaration.



[stmt.ambig]/2

The remaining cases are declarations. [ Example:

class T {
// ...
public:
T();
T(int);
T(int, int);
};
T(a); // declaration

...

关于c++ - 为什么 Foo(b) 在 C++ 中编译成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60584559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com