「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > クラス データ メンバーは C++ で直接初期化できますか?

クラス データ メンバーは C++ で直接初期化できますか?

2024 年 11 月 18 日に公開
ブラウズ:874

Can Class Data Members Be Initialized Directly in C  ?

クラス データ メンバーは直接初期化できますか?

C では、次の例に示すように、クラス データ メンバーは直接初期化構文 () を使用して初期化できません。 :

#include 

class test {
public:
    void fun() {
        int a(3);
        std::cout 

コンパイルはエラーで失敗します:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

これはなぜですか?

C 標準では、この構文は明示的に禁止されています。クラスデータメンバーの初期化。この機能の導入に関する初期の提案では、解析の問題が理由として挙げられていました。

次のあいまいな例を考えてみましょう:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

標準では解決策が提案されています:

曖昧さを排除するために、C 標準ではクラス データ メンバーの初期化に次の構文のみが許可されています:

  • = 初期化子句
  • { 初期化子リスト}

この解決策により、明確さが保証され、宣言がオブジェクト宣言と関数宣言の両方に似ている可能性がある場合の誤解の可能性が回避されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3