c++11 - 匿名结构中的大括号或等于初始化器在 VS2013 上不起作用

标签 c++11 member-initialization visual-c++-2013 anonymous-struct

结构中匿名结构中的大括号或等于初始化程序不会对 VS2013 生成的输出执行其工作。代码如下:

#include <iostream>
#include <cstdint>


struct S
{
    struct
    {
        uint64_t val = 0;
    }anon;
};

int main()
{
    S s;
    S *a = new S;

    std::cout << s.anon.val << std::endl;
    std::cout << a->anon.val << std::endl;

    return 0;
}

在 Linux 上使用此命令进行编译:

g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct

(添加优化标志不会影响结果)

预期结果:

0
0

奇怪。使用 VS2013 运行它会给出垃圾值。就实现 C++11 标准而言,谁的观点是正确的?我非常怀疑这是 GCC 的错。

是否与一些无用的 VS 编译器选项有关? Windows 扩展?由于 MS 制造的错误,我必须为结构创建默认构造函数?这是荒谬的。

最佳答案

I have to make default constructors for the structures because of a bug MS made? this is absurd.

是的,也不,这并不荒谬。

编译器也是程序,并且往往会出现错误——有些错误比其他错误更多。

如果您对该工具没有选择,那么您就必须接受该工具的局限性,无论这在理论上听起来多么荒谬。

关于c++11 - 匿名结构中的大括号或等于初始化器在 VS2013 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42477767/

相关文章:

c++ - unique_ptr 无法初始化

c++ - Clang++ Xcode 4.4 非静态成员初始化和移动构造函数

c++ - 可以创建 N 个方法的类接口(interface)

c++ - 如何使用函数的输出初始化 const 数组结构字段?

c++ - 成员初始值设定项列表中的赋值操作

c++ - 在 Visual C++ 2013 中不能为 "Go To Definition"

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?

c++ - 带有大括号的 char 数组的非静态成员初始化在 gcc 中给出了一个错误,而不是在 clang 中

c++ - 为什么 is_integral_v<string> 是真的?