Skip to content

Commit

Permalink
C++14 : 「宣言時のメンバ初期化を持つ型の集成体初期化を許可」を追加 (close #361)
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Jan 10, 2023
1 parent 6c92130 commit 27f6bb3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lang/cpp14.md
Expand Up @@ -20,7 +20,7 @@ C++14とは、2014年12月に改訂され、ISO/IEC 14882:2014で標準規格化
| [ジェネリックラムダ](cpp14/generic_lambdas.md) | ラムダ式のパラメータを`auto`にすることで、ジェネリックな関数呼び出し演算子を持つ関数オブジェクトを生成する |
| [変数テンプレート](cpp14/variable_templates.md) | 変数定義時のテンプレート指定を可能にする |
| [`constexpr`の制限緩和](cpp14/relaxing_constraints_on_constexpr.md) | `if`文、`switch`文による条件分岐の許可。<br/>`for`文、`while`文、`do-while`文によるループの許可。<br/>`void`戻り値型の許可<br/>初期化を伴う変数宣言の許可。<br/>変数書き換えの許可 |
| [宣言時のメンバ初期化を持つ型の集成体初期化を許可](cpp14/member_initializers_and_aggregates.md.nolink) | 集成体において、宣言時に初期化されているメンバを持つことを許可する |
| [宣言時のメンバ初期化を持つ型の集成体初期化を許可](cpp14/member_initializers_and_aggregates.md) | 集成体において、宣言時に初期化されているメンバを持つことを許可する |
| [ネストする集成体初期化における波カッコ省略を許可](cpp14/brace_elision_in_array_temporary_initialization.md) | 一様初期化と初期化子リストを組み合わせた際、二重に波カッコが必要となっていた仕様を緩和し、波カッコを省略できるようにする |
| [`[[deprecated]]`属性](cpp14/deprecated_attr.md) | 非推奨の機能であることを示す属性 |
| [数値リテラルの桁区切り文字](cpp14/digit_separators.md) | シングルクォーテーションで数値リテラルを桁区切りする |
Expand Down
35 changes: 35 additions & 0 deletions lang/cpp14/member_initializers_and_aggregates.md
@@ -0,0 +1,35 @@
# 宣言時のメンバ初期化を持つ型の集成体初期化を許可
* cpp14[meta cpp]

## 概要
C++11で導入された[メンバ初期化子](/lang/cpp11/non_static_data_member_initializers.md)は集成体の初期化と組み合わせて使用することができない問題があった。

C++11で不適格となる以下のコードは、C++14では適格となる:

```cpp
#include <string>

struct Univ {
std::string name;
int rank;
std::string city = "unknown";
};

int main()
{
Univ u = {"Columbia", 10}; // OK: city=="unknown"
Univ v = {"Columbia", 10, "New York"}; // OK
}
```
## 仕様
- 集成体の定義として「非静的メンバ変数の初期化をもたない」ことが条件になっていたが、それを削除
## 関連項目
- [C++11 非静的メンバ変数の初期化](/lang/cpp11/non_static_data_member_initializers.md)
## 参照
- [N3653 - Member initializers and aggregates](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html)

0 comments on commit 27f6bb3

Please sign in to comment.