[解決済み] コンストラクタのイニシャライザでメンバ配列を初期化する
2022-10-30 16:27:15
質問
class C
{
public:
C() : arr({1,2,3}) //doesn't compile
{}
/*
C() : arr{1,2,3} //doesn't compile either
{}
*/
private:
int arr[3];
};
配列の初期化が
=
という構文があるからです。
int arr[3] = {1,3,4};
質問
- やりたいことをやるにはどうしたらいいか(つまり です。 初期化 での配列の初期化です。 コンストラクタで配列を初期化することです(本体で要素を代入するのではありません を代入しない)。それは可能なのでしょうか?
- C++03 標準は、ctor 初期化子で集約体(配列を含む)を初期化することについて何か特別なことを言っていますか?または、上記のコードの無効性は、いくつかの他のルールの帰結ですか?
- C++0x のイニシャライザー リストで問題は解決されますか。
P.S. ベクトル、boost::array、そして私がよく知っている配列に対する優位性については言及しないでください。
どのように解決するのですか?
- やりたいこと(つまり、コンストラクタで配列を初期化する(本体で要素を代入しない))を実現するにはどうしたらよいでしょうか。可能なのでしょうか?
はい、配列を含む構造体を使用しています。そんなことはもう知っているとおっしゃいますが、では質問の意味がわかりません。そうすると、あなたは
する
で配列を初期化し、本文では代入しない。これは
boost::array
が行うものです。
C++03標準は、ctor初期化子で集合体(配列を含む)を初期化することについて何か特別なことを言っているのでしょうか?あるいは、上記のコードの無効性は、他の何らかのルールの帰結なのでしょうか?
mem-initializerは直接初期化を使用します。そして、条項8のルールはこのようなことを禁じています。以下のケースは正確にはわかりませんが、コンパイラによっては許可しているものもあります。
struct A {
char foo[6];
A():foo("hello") { } /* valid? */
};
参照 このGCC PR を参照してください。
<ブロッククオートC++0xのイニシャライザーリストは問題を解決してくれますか?
はい、そうです。しかし、あなたの構文は無効だと思います。リストの初期化を開始するには、中括弧を直接使用する必要があります。
struct A {
int foo[3];
A():foo{1, 2, 3} { }
A():foo({1, 2, 3}) { } /* invalid */
};
関連
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] コンストラクタのコロンメンバー(" : ")の変な構文は何ですか?
-
[解決済み】メンバ関数でスレッドを開始する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている