【解決方法】それらはconst変数の初期化ですか?


以下は、C++ の私の理解では合法ではないように思われる C++ のコード スニペットです。

3 つのステートメント (#1 から #3 まで) は、高、低、およびスコアの 3 つの定数変数の初期化ですか? はいの場合、そのような初期化のチュートリアルはどこにありますか? 以前は、このようなコーディングはありませんでした。

int main()
{
 
    int high{ 100 };  // #1
    int low{ 66 };    // #2
    const int* score{ &high };  // #3
// .....
}

私が試したこと:

「C ++での定数の初期化」に関するいくつかの用語をグーグル検索しましたが、理解できません。

解決策 1

ここを参照してください: 初期化 – cppreference.com[^]

しかし、それらのどれも const 変数ではありません。それらはすべて変更できるため、最後の「一種の」例外があります。これらは合法で機能しています。

C++
high++;
low++;
score++;

唯一の違法な変更は次のとおりです。

C++
(*score)++;

が指しているアイテムだから score<code>const、しかし score それ自体はそうではありません。

解決策 2

C++ 11 では「均一な初期化」が導入されたため、中かっこのペアを使用して基本的な型、クラス、構造体、共用体を初期化できます。

int high{ 100 };  // #1
int low{ 66 };    // #2
const int* score{ &high };  // #3

high\low は const 変数ではなく、const 値として割り当てられた 2 つの変数です。
score は const ポインター変数であるため、*score の値を変更することはできません。

参照してください:

初期化 – cppreference.com[^]

Initializers
How to initialize classes, structs, arrays and fundamental types in C++.

クラス、構造体、共用体のブレースの初期化 | マイクロソフト ラーン[^]

解決策 3

初期化に関係するすべて 変数 (のインスタンス 定数)。 すなわち

見積もり:

int高{100}; // #1
int低{66}; // #2

2 つの変数を定数 (リテラル) 値で初期化します。

見積もり:

const int* スコア{ &high }; // #3

別の変数のアドレスで変数 (ポインター) を初期化します。 ポインターを介して元の変数値を変更することはできません。 const 宣言で。

本当に欲しいなら 定数 (それ以外の 変数) 次に、次のようなものを記述する必要があります。

C++
const int High{ 100 };
const int Low{ 66 };
const int * const PtrScore { &High };

試してみることをお勧めします cdecl: C 意味不明 英語[^].

コメント

タイトルとURLをコピーしました