在C++中初始化构造函数初始化列表中的char数组

Fro*_*art 5 c++ arrays class initialization-list

可以像这样使用初始化吗?

class Foo
{
public:
   Foo() : str("str") {}
   char str[4];
};
Run Code Online (Sandbox Code Playgroud)

还有这个?

int main()
{
   char str[4]("str");
}
Run Code Online (Sandbox Code Playgroud)

两者都给我gcc 4.7.2中的错误:

error:用作初始化程序的数组

Comeau编译两者.

iam*_*ind 5

在 C++03 中,不能像您提到的那样初始化非静态成员数组。在 g++ 中,你可以有一个对initializer list的扩展,但这是 C++11 的特性。

函数中的局部变量可以这样初始化:

char str[] = "str"; // (1)
char str[] = {'s','t','r',0}; // (2)
Run Code Online (Sandbox Code Playgroud)

虽然您可以将维度称为4,但最好不要提及以避免意外数组越界。

我建议std::string在这两种情况下都使用。


bam*_*s53 5

这段代码是有效的C++ 03,gcc在这里根本不符合.

允许此语法初始化字符数组的语言与允许任何其他类型的语言相同; 没有例外会禁止它在字符数组上使用.在这些情况下(),=初始化是等效的,字符数组应该根据8.5.2进行初始化.

这是一个确认的gcc错误报告,涵盖了这一点.