[ad_1]
以下は、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 変数ではありません。それらはすべて変更できるため、最後の「一種の」例外があります。これらは合法で機能しています。
high++; low++; score++;
唯一の違法な変更は次のとおりです。
(*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 の値を変更することはできません。
参照してください:
解決策 3
初期化に関係するすべて 変数 (のインスタンス 定数)。 すなわち
見積もり:int高{100}; // #1
int低{66}; // #2
2 つの変数を定数 (リテラル) 値で初期化します。
見積もり:const int* スコア{ &high }; // #3
別の変数のアドレスで変数 (ポインター) を初期化します。 ポインターを介して元の変数値を変更することはできません。 const
宣言で。
本当に欲しいなら 定数 (それ以外の 変数) 次に、次のようなものを記述する必要があります。
const int High{ 100 }; const int Low{ 66 }; const int * const PtrScore { &High };
試してみることをお勧めします cdecl: C 意味不明 英語[^].
[ad_2]
コメント