このような初期化を使用しても問題ありませんか?
class Foo
{
public:
Foo() : str("str") {}
char str[4];
};
この?
int main()
{
char str[4]("str");
}
どちらもgcc 4.7.2でエラーを出します:
エラー: 初期化子として配列が使用されました
コモーは両方をコンパイルします。
このような初期化を使用しても問題ありませんか?
class Foo
{
public:
Foo() : str("str") {}
char str[4];
};
この?
int main()
{
char str[4]("str");
}
どちらもgcc 4.7.2でエラーを出します:
エラー: 初期化子として配列が使用されました
コモーは両方をコンパイルします。
C++03 では、おっしゃる通り、非静的メンバー配列を初期化できません。g++ では、初期化子 listの拡張機能を使用できる場合がありますが、これは C++11 の機能です。
関数内のローカル変数は、次のように初期化できます。
char str[] = "str"; // (1)
char str[] = {'s','t','r',0}; // (2)
次元を として言及することはできますが、境界外の偶発的な配列を避けるために言及しない4
方がよいでしょう。
std::string
両方の場合に使用することをお勧めします。
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)
};
また、使用している C++ のバージョンに関係なく、std::string
または使用することを検討することもできます。std::vector<char>