回答編集履歴

3

/aggregate/d

2022/10/07 09:22

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  はい。
4
4
 
5
- より正確には「対象が **constな配列型** の場合は、束縛される名前(`a`, `b`)もconstとなってしまう」です。下記コードのように対象が **constなクラスオブジェクト** (厳密には集成体; aggregate 型)であれば、構造化束縛により導入される名前`a`, `b`は非constな型(`int`)となります。
5
+ より正確には「対象が **constな配列型** の場合は、束縛される名前(`a`, `b`)もconstとなってしまう」です。下記コードのように対象が **constなクラスオブジェクト** であれば、構造化束縛により導入される名前`a`, `b`は非constな型(`int`)となります。
6
6
 
7
7
  ```c++
8
8
  int main()
@@ -19,12 +19,12 @@
19
19
  }
20
20
 
21
21
  struct S { int x, y; };
22
- {// 非constオブジェクト(集成体)
22
+ {// 非constオブジェクト
23
23
  S obj = { 1, 2 };
24
24
  auto [a, b] = obj;
25
25
  a += 1; // OK
26
26
  }
27
- {// constオブジェクト(集成体)
27
+ {// constオブジェクト
28
28
  const S obj = { 1, 2 };
29
29
  auto [a, b] = obj;
30
30
  a += 1; // OK

2

update

2022/10/07 09:00

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -50,3 +50,4 @@
50
50
  a += 1; // OK
51
51
  }
52
52
  ```
53
+ C++17範囲の実装例: https://wandbox.org/permlink/SnYTx3EQgeSsUkKA

1

add link

2022/10/07 08:54

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -38,7 +38,7 @@
38
38
  言語組み込みの配列型(`const int[N]`)に対する回避手段は存在しない...と思います。たぶん。
39
39
 
40
40
  `std::array<int, N>`型を経由して強引に実現することはできます。
41
- (C++20で追加された配列型から`std::array`型へ変換する`std::to_array`ヘルパ関数を使っていますが、C++17でも相当機能を自作可能です。)
41
+ (C++20で追加された配列型から`std::array`型へ変換する`std::to_array`ヘルパ関数を使っていますが、C++17でも[相当機能を自作可能](https://en.cppreference.com/w/cpp/container/array/to_array)です。)
42
42
 
43
43
  ```c++
44
44
  #include <array>