gpt4 book ai didi

c++ - 为什么下面这段带有非常量转换函数的代码没有歧义呢?

转载 作者:太空狗 更新时间:2023-10-29 20:50:54 25 4
gpt4 key购买 nike

考虑以下代码(取自 https://en.cppreference.com/w/cpp/language/cast_operator )

struct To {
To() = default;
To(const struct From&) {} // converting constructor
};

struct From {
operator To() const {return To();} // conversion function
};

int main()
{
From f;

To t2 = f; // copy-initialization: ambiguous
// (note, if conversion function is from a non-const type, e.g.
// From::operator To();, it will be selected instead of the ctor in this case)
}

正如评论所说,下面这行确实有歧义,因为有两个候选(转换函数和转换构造函数同样适用)

To t2 = f; //compile error

但是,如注释所述,如果我从 conversion 函数中删除 const 会导致以下代码:

struct From {
operator To() {return To();} // conversion function
};

调用编译正常。
const 限定符不应该影响conversion 函数的返回值,那么为什么调用不再有歧义呢?

最佳答案

The const qualifier should not affect the conversion function return value, so why the call is no longer ambiguous?

它不影响结果,但会影响选择最佳可行方法的重载决策。类似于这些组合函数的情况

To make(From const&);
To make(From&);

make(f) 中哪个重载更匹配?这是第二个,因为参数类型是非常量,更好地匹配参数 (f),它本身是非常量。

关于c++ - 为什么下面这段带有非常量转换函数的代码没有歧义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742580/

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