gpt4 book ai didi

C++:考虑但不调用构造函数的特殊性

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:59 28 4
gpt4 key购买 nike

关于 cppreference about list-initialization在第二个意图中(用于复制列表初始化)它说:

copy-list-initialization (both explicit and non-explicit constructors are considered, but only non-explicit constructors may be called)

“考虑”构造函数和实际“调用”构造函数究竟有什么区别。为什么要考虑可能无论如何都不会调用的构造函数?

最佳答案

“considered”和“called”的区别在于,“considered”是指候选函数参与了重载决策,而“called”是指实际被选为最佳匹配。明确地(双关语不是故意的),这意味着如果在复制列表初始化期间选择了显式构造函数,则它是被禁止的。例如考虑这种情况:

struct String {
explicit String(int size);
String(char const *value);
};

String s = { 0 };

在这里,您使用的是隐式转换,其中显式构造函数更匹配,因此编译器理所当然地拒绝了它。您需要编写 String{ 0 } 来修复代码。现在想象一下,如果考虑显式构造函数,并且前者是合法代码。有一个什么都不做的显式构造函数会很奇怪。

关于C++:考虑但不调用构造函数的特殊性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061398/

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