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

Initialize array of char in initialization list of constructor in C++

本文关键字:初始化 数组 char 列表 构造函数      更新时间:2023-10-16

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

class Foo
{
public:
   Foo() : str("str") {}
   char str[4];
};

和这个?

int main()
{
   char str[4]("str");
}

两者都给我GCC 4.7.2的错误:

错误:数组用作初始器

comeau汇编两者。

在C 03中,非静态成员数组不能像您提到的那样初始化。在G 中,您可能具有初始化器列表的扩展名,但这是C 11功能。

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

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

尽管您可以将维度提及为 4,但是更好地提到避免偶然的数组。

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

此代码是有效的C 03,而GCC根本不符合。

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

初始化字符数组。

这是确认的GCC错误报告,涵盖此信息。

在C 03中,这是不可能的。Comeau可能会因为非标准扩展而编译。

在C 11中,您可以做到这一点:

Foo() : str({'s','t','r'}) {}       //C++11 only

或者,您可能更喜欢此类:

class Foo
{
public:
   Foo() {}
   char str[4] = "str"; //in-class initialization (C++11 only)
};

另外,您可以考虑使用std::stringstd::vector<char>,无论您使用的C 版本如何。