gpt4 book ai didi

c++ - 奇怪的编译器决定

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:22 26 4
gpt4 key购买 nike

我有以下代码:

enum nums {
a
};

class cls {
public:
cls( nums );
};

void function()
{
cls( a );
}

当我尝试用 gcc 编译它时,出现以下错误:

test.cpp: In function ‘void function()’:
test.cpp:12:10: error: no matching function for call to ‘cls::cls()’
test.cpp:12:10: note: candidates are:
test.cpp:7:3: note: cls::cls(nums)
test.cpp:7:3: note: candidate expects 1 argument, 0 provided
test.cpp:5:7: note: cls::cls(const cls&)
test.cpp:5:7: note: candidate expects 1 argument, 0 provided
make: *** [test] Error 1

如果我用这个替换函数:

void function()
{
cls name( a );
}

然后一切正常。如果我使用带有两个参数的构造函数,它也会起作用。如果我将“显式”添加到构造函数,它就不起作用。

我知道 gcc 以某种方式将其解析为定义一个名为“a”的“cls”类型的变量,但我不熟悉这种定义变量的语法。在我看来,这是一条定义类型为 cls 的匿名临时变量的语句,传递的“a”是参数。

使用 gcc 4.6.3 编译。

有什么见解吗?

谢谢,沙查尔

最佳答案

另一个最尴尬的解析问题的例子。这行:

cls( a );

声明了一个名为 acls 类型的局部变量,它是(或应该)通过调用默认构造函数进行初始化。哪个不存在,错误消息从何而来。

如果你真的想构造一个临时对象之后立即销毁,您可以通过以下方式消除歧义将整个表达式放在括号中:

(cls( a ));

定义不能出现在括号中;一个表达式可以。

关于c++ - 奇怪的编译器决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594052/

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