gpt4 book ai didi

C++11:传递值参数初始化中转换构造函数和转换函数之间的歧义?

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

#include <iostream>
using namespace std;

struct Y;

struct X
{
X(const Y&) { cout << "converting constructor" << endl; }
};

struct Y
{
operator X() { cout << "conversion function" << endl; }
};

void f(X x) {}

int main()
{
Y y;
f(y);
}

在上面,转换函数被我的编译器(gcc 4.6.1)赋予了转换构造函数的优先权,但是在标准中它声明:

User-defined conversions are applied only where they are unambiguous

在这种情况下似乎存在歧义。谁能解释一下矛盾?

我原以为上面的代码不会编译。我也很确定几年前 Scott Meyers 写了关于这个特定示例的文章,并说它无法编译。我错过了什么?

最佳答案

因为 X 构造函数需要一个 const 参数,所以它更喜欢运算符。如果您在 X 构造函数中删除 const,那么编译器会提示歧义。如果有多个具有引用参数的函数,则首选具有最宽松的 const 限定的函数。

一个很好的答案here

关于C++11:传递值参数初始化中转换构造函数和转换函数之间的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661078/

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