gpt4 book ai didi

c++ - 为什么在初始化列表中初始化 POD 数据时必须进行 C 风格的类型转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:14 24 4
gpt4 key购买 nike

struct POD { int i, j; };    
class A {
POD m_pod;
public:
A() : m_pod({1,2}) {} // error
A() : m_pod(static_cast<POD>({1,2})) {} // error
A() : m_pod((POD) {1,2}) {} // ok!
};

我在使用 g++34 编译的旧生产代码中看到了这一点,直到那时我才知道这个特性。
g++吗具体功能?如果不是那么,为什么需要类型转换,而且只允许 C 风格的类型转换?

最佳答案

实际上,C++ 标准(C++03 和 C++11)不允许使用以下语法:

A() : m_pod((POD) {1,2}) {} // ok!

由于 GCC 编译它,它是一个 GCC 扩展。

如果你用 -pedantic 选项编译它,它会给出这个警告:

pod.cpp:8:29: warning: ISO C++ forbids compound-literals


在 C++11 中,你可以这样写:

A() : m_pod{1,2} {}

演示:http://ideone.com/XaO4y

或者只是这样:

class A {
POD m_pod {1,2}; //in-place initialization
public:
A() {}
};

虽然 Ideone 不支持这个。

关于c++ - 为什么在初始化列表中初始化 POD 数据时必须进行 C 风格的类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908106/

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