【问题标题】:Compilation error for union联合的编译错误
【发布时间】:2014-05-10 23:16:42
【问题描述】:

谁能解释一下为什么下面的程序会导致编译问题。我已经通过VS2013编译了源代码。

#include <iostream>
using namespace std;

// Do not work
union myuni
{
    string str;
};

void main()
{

}

联合声明时是否需要固定长度大小?同样的场景也适用于结构。

【问题讨论】:

  • 自 c++11 起才允许联合中的非 POD 类型。
  • @tgmath 即使在 C++11 中,您也需要用户定义的构造函数等,而这些构造函数又使用placement new 来初始化正确的成员。

标签: c++ unions


【解决方案1】:

union 中不能有 string,因为前者包含构造函数。

(虽然在 C++11 中允许,但这在 VS2013 中不受支持)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多