gpt4 book ai didi

c++ - 为什么 g++5 在自动类型推导中推导对象而不是 initializer_list

转载 作者:可可西里 更新时间:2023-11-01 18:19:57 26 4
gpt4 key购买 nike

我最近发现了这段代码:

struct Foo{};

int main()
{
Foo a;
// clang++ deduces std::initializer_list
// g++5.1 deduces Foo
auto b{a};
a = b;
}

它在 g++5.1 中编译良好,但在 clang++ 中失败(同时使用 -std=c++11-std=c++14,结果相同)。原因是 clang++ deduces the type of b as std::initializer_list<Foo> , 而 g++5.1 deduces as Foo . AFAIK,类型确实应该是(确实违反直觉)std::initializer_list这里。为什么 g++5 将类型推断为 Foo

最佳答案

有一个 C++1z 的提案实现了大括号初始化的新类型推导规则(N3922),我猜 gcc 实现了它们:

For direct list-initialization:
1. For a braced-init-list with only a single element, auto deduction will deduce from that entry;
2. For a braced-init-list with more than one element, auto deduction will be ill-formed.

[Example:

auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std::initializer_list<int>
auto x5{ 3 }; // decltype(x5) is int.

-- end example]

这是 gcc patch关于“ unicorn 初始化”的新变化。

关于c++ - 为什么 g++5 在自动类型推导中推导对象而不是 initializer_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007692/

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