gpt4 book ai didi

c++ - 奇怪的未初始化 const 成员行为

转载 作者:IT老高 更新时间:2023-10-28 22:12:39 37 4
gpt4 key购买 nike

考虑一下这段代码:

struct Foo {

};

template<typename T>
struct Bar {
const T foo;
};

int main() {
Bar<Foo> test;
}

我用 g++-4.9.2 和 [-std=c++11 -O0 -g3 -pedantic -Wall -Wextra -Wconversion] 编译它并得到 error: uninitialized const member in ‘struct Bar<Foo>’ .这很明显。

但尝试添加 std::string 作为 Foo 成员和程序编译!

#include <string>
struct Foo {
std::string test;
};
// (...)

发生了什么?将 test 的类型替换为 double 会导致程序无法再次编译。类中的哪些字符串成员发生了变化?

Link to online compiler with this snippet.

gcc 似乎从 4.6 版开始就这样了。

最佳答案

我认为它应该始终产生错误。 Clang 就是这样做的。 C++ 标准在 §12.1.4 的条款 (4.3) 中说默认构造函数被隐式删除

— any non-variant non-static data member of const-qualified type (or array thereof) with no brace-or equal-initializer does not have a user-provided default constructor,

作为 Foo没有用户提供的默认构造函数,Bar应该有一个隐式删除的默认构造函数,因此实例化 Bar<Foo> test在 main 中应该会产生错误。

也许向 GCC 报告错误?

关于c++ - 奇怪的未初始化 const 成员行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743264/

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