这个C ++初始化有效吗?

时间:2014-07-03 17:41:09

标签: c++ visual-c++

另一位开发人员写了这篇文章,这对我来说很奇怪。它运行于:http://codepad.org/jhnFpzGa

但是我很担心,因为它会警告我无法在MSVC 10上创建默认构造函数(因为显然是参考)。然而它也适用于MSVC。如果我将它作为const UsageInfo& amp;并且警告不会消失。任

typedef const char* UsageInfo[2];
UsageInfo usage_1 = {"foo1", "bar1"};
UsageInfo usage_2 = {"foo2", "bar2"};

struct JumpTableEntry
{
    const char* command;
    UsageInfo& usage; // {const char *usage,const char &details}
};

JumpTableEntry jumpTable_[] =
{
    {"1", usage_1},
    {"2", usage_2}
};

int main()
{
    cout << jumpTable_[0].usage[1] << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

警告似乎有效。它的不是默认构造。如果您希望警告消失,我建议使用以下方法之一:

  • 声明一个默认构造函数,该构造函数是私有的,可以做一些合法的事情,但不会产生警告,但最终无法达到。
  • 明确删除默认构造函数JumpTableEntry() = delete但在VS2013之前不支持此功能 - link

您可能会在这里稍微混淆为什么它会提示/警告构造函数,因为您使用了单词struct。请记住,在C ++中,structclass除非您在public中默认struct成员,否则通常会有所不同private es。{/ p>中的class