gpt4 book ai didi

c++ - 使用统一初始化语法的自动类型推导 c++11 与 c++17

转载 作者:行者123 更新时间:2023-12-02 02:23:47 27 4
gpt4 key购买 nike

我试图测试自动类型推导。 Scott Meyers(Effective 现代 C++)和 Bjarne Stroustrup 的 C++ 编程语言都提到了这样做

自动值{10};

将推断 val 为“初始化列表”类型。

我读到这在 C++17 中已更改,因此如果列表中只有一个元素,则 auto 将推导为该元素的类型。

但是,我通过显式指定 C++11 标准,使用最新的 gcc (v10) 和 clang (V11) 编译器对此进行了测试,但没有看到预期的行为

auto A {1.0};
std::cout << typeid(A).name();

将“d”打印到屏幕

auto A={1.0};
std::cout << typeid(A).name();

将“St16initializer_listIdE”打印到屏幕。

无论我是否指定,这都是一样的

gcc -std=c++11

gcc -std=c++17

对于 clang 来说也是如此。

我知道它在 C++17 中已更改,但为什么我看不到“旧”行为?还是我理解错了?

谢谢

最佳答案

介绍 C++17 此项更改的论文 — https://wg21.link/n3922 ——有这样的声明:

Direction from EWG is that we consider this a defect in C++14.

如果存在缺陷,则意味着该论文将被追溯应用,因此 future 的编译器针对以前的标准进行编译将表现出行为。这就是为什么您看不到旧行为的原因。

如果您使用此缺陷修复之前的较旧编译器进行编译,您可以看到推导的类型为 std::initializer_list<double> : https://godbolt.org/z/GrnrTE 。而如果您将编译器更改为较新的版本(例如 g++ 10.2),您可以看到推导的类型为 double : https://godbolt.org/z/r5G945

关于c++ - 使用统一初始化语法的自动类型推导 c++11 与 c++17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65998518/

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