gpt4 book ai didi

c++ - 这个 AnonymousClass(variable) 声明中到底发生了什么?

转载 作者:可可西里 更新时间:2023-11-01 18:21:27 26 4
gpt4 key购买 nike

尝试编译:

class AnonymousClass
{
public:
AnonymousClass(int x)
{
}
};


int main()
{
int x;
AnonymousClass(x);
return 0;
}

从 MSVC 生成错误:

foo.cpp(13) : error C2371: 'x' : redefinition; different basic types
foo.cpp(12) : see declaration of 'x'
foo.cpp(13) : error C2512: 'AnonymousClass' : no appropriate default constructor available

g++ 的错误信息类似:

foo.cpp: In function ‘int main()’:
foo.cpp:13: error: conflicting declaration ‘AnonymousClass x’
foo.cpp:12: error: ‘x’ has a previous declaration as ‘int x’
foo.cpp:12: warning: unused variable ‘x’

通过为 AnonymousClass 对象指定一个显式名称很容易解决这个问题,但是这里发生了什么,为什么?我认为这是更多的声明语法怪异(如 comp.lang.C++ 常见问题解答的 Q10.2Q10.21 中描述的情况),但我对此并不熟悉。

最佳答案

AnonymousClass(x);

它定义了一个 AnonymousClass 类型的变量 x。这就是您收到重定义错误的原因,因为 x 已声明为 int

括号多余。您可以添加更多大括号,例如:

AnonymousClass(x);
AnonymousClass((x));
AnonymousClass(((x)));
AnonymousClass((((x))));
//and so on

它们都与:

AnonymousClass x;

演示:http://www.ideone.com/QnRKH


您可以使用语法 A(x) 来创建匿名对象,尤其是在调用函数时:

int x = 10;
f(A(x)); //1 - () is needed
f(A((((x))))); //2 - extra () are superfluous

12 都调用函数 f 并传递 A 类型的对象:

但是,额外括号在 2 行仍然是多余的。

关于c++ - 这个 AnonymousClass(variable) 声明中到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341951/

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