gpt4 book ai didi

c++ - DR 2137 我不清楚

转载 作者:行者123 更新时间:2023-11-30 05:17:06 26 4
gpt4 key购买 nike

DR 2137我们有以下文本(重点是我的):

It is not clear in code like the following that selecting a copy/move constructor is the correct choice when an initializer list contains a single element of the type being initialized, as required by issue 1467:

#include <initializer_list>
#include <iostream>

struct Q {
Q() { std::cout << "default\n"; }
Q(Q const&) { std::cout << "copy\n"; }
Q(Q&&) { std::cout << "move\n"; }
Q(std::initializer_list<Q>) { std::cout << "initializer list\n"; }
};

int main() {
Q x = Q { Q() };
}

Here the intent is that Q objects can contain other Q objects, but this is broken by the resolution of issue 1467.

我想了解为什么上面的代码会被 issue 1467 的分辨率破坏.

最佳答案

DR 2147 有这样的声明:“目的是 Q 对象可以包含其他 Q 对象”。鉴于此,它假定如果用户从包含其他 Q 的花括号初始化列表构造 Q,则用户的意图是调用 >initializer_list 构造函数。

鉴于该假设,调用 initializer_list 构造函数是“错误的”,这将导致 1467。

不管你是否同意这个逻辑,这就是 2147 背后的想法。这也是允许 [over.match.list] 优先考虑 initializer_list 构造函数而不是任何其他构造函数类型的想法。所以在这种情况下,它是一致的。

关于c++ - DR 2137 我不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283586/

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