最įĩ‚æ›´æ–°æ—Ĩ時:
が更新

åąĨæ­´ ᎍ集

ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽãƒĄãƒŗãƒå¤‰æ•°åˆæœŸåŒ– [P0683R1](C++20)

こぎペãƒŧジはC++20ãĢæŽĄį”¨ã•ã‚ŒãŸč¨€čĒžæŠŸčƒŊãŽå¤‰æ›´ã‚’č§ŖčĒŦしãĻいぞす。

ãŽãĄãŽC++čĻæ ŧでさらãĢ変更される場合があるためé–ĸé€Ŗé …į›Žã‚’å‚į…§ã—ãĻください。

æĻ‚čρ

C++11で導å…Ĩã•ã‚ŒãŸéžé™įš„ãƒĄãƒŗãƒå¤‰æ•°ãŽåˆæœŸåŒ–å­ã§ã¯ã€ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ã¯å¯žčąĄå¤–ã§ã‚ãŖãŸã€‚

C++20ã§ã¯ã€ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽãƒĄãƒŗãƒå¤‰æ•°ã‚‚ã€åŽšįžŠæ™‚ãĢ初期化ができるようãĢãĒる。

struct X {
  int x : 6 = 8; // 6ãƒ“ãƒƒãƒˆã‚’æŒã¤ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãƒĄãƒŗãƒå¤‰æ•°xを、値8で初期化
  int y : 2 {1};  // 2ãƒ“ãƒƒãƒˆã‚’æŒã¤ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãƒĄãƒŗãƒå¤‰æ•°yを、値1で初期化
};

ただしäģĨ下ぎようãĒįŠļæŗã§ã¯ã€æœ€é•ˇãƒžãƒƒãƒãĢã‚ˆãŖãĻæ„å›ŗé€šã‚ŠãĢ動äŊœã—ãĒい場合があるīŧš

int bits;
struct X {
  int a : true ? 8 : bits = 2; // int a : (true ? 8 : bits = 2)
  int b : 1 || new int { 0 };  // int b : (1 || new int {0})
};

ã“ã†ã„ãŖãŸå ´åˆãĢは、丸ã‚Ģãƒƒã‚ŗã§å›˛ãžãĒければãĒらãĒいīŧš

int bits;
struct X {
  int a : (true ? 8 : bits) = 2;
  int b : (1 || new int) { 0 };
};

ä앿§˜

  • ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢド初期化ぎ構文はäģĨ下ぎようãĢãĒるīŧš

    型 変数名(ᜁį•Ĩ可) åąžæ€§(ᜁį•Ĩ可) : 厚数åŧãŽãƒ“ット嚅(ᜁį•Ĩ可) æŗĸã‚Ģãƒƒã‚ŗã‚‚ã—ãã¯äģŖå…Ĩ構文ãĢよる初期化子(ᜁį•Ĩ可)
    

  • ãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽåˆæœŸå€¤ã¯ã€éžãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢãƒ‰ãŽãƒĄãƒŗãƒå¤‰æ•°åˆæœŸåŒ–ã¨åŒæ§˜ãĢデフりãƒĢãƒˆå€¤ã§ã‚ã‚‹ã€‚ã‚ŗãƒŗã‚šãƒˆãƒŠã‚¯ã‚ŋで明į¤ēįš„ãĢãƒ“ãƒƒãƒˆãƒ•ã‚ŖãƒŧãƒĢドを初期化した場合、デフりãƒĢト値ではãĒく指厚された初期値で初期化される

例

#include <iostream>

struct X {
  int a : 6 = 8;
  int b : 2 {1};
};

int main()
{
  X x;
  std::cout << x.a << std::endl;
  std::cout << x.b << std::endl;
}

å‡ē力

8
1

é–ĸé€Ŗé …į›Ž

å‚į…§