回答編集履歴

1 修正

asm

asm score 11019

2018/05/19 08:03  投稿

そもそも、C言語においては'配列'というのは特例の塊みたいなもんなのです。
そもそも、C/C++言語においては'配列'というのは特例の塊みたいなもんなのです。
```c++
#include <iostream>
using namespace std;
void print1(int a[]){ cout << sizeof(a) << endl; }
void print2(int a[4]){ cout << sizeof(a) << endl; }
void print3(int a[0]){ cout << sizeof(a) << endl; }
int main(){
 int a[4] = {0};
 cout << sizeof(a) << endl; // 16
 print1(a); // => 8
 print2(a); // => 8
 print3(a); // => 8
 cout << sizeof(int*) << endl; // => 8
 // int b[4] = a; // コンパイルエラー
}
```
これがSTLのarrayを用いることで
```c++
#include <iostream>
#include <array>
#include <vector>
using namespace std;
void print1(vector<int> a){ cout << a.size() << endl; }
void print2(array<int, 4> a){ cout << a.size() << endl; }
void print3(array<int, 0> a){ cout << a.size() << endl; }
int main(){
 array<int, 4> a{4,3,2,0};
 cout << a.size() << endl; // 4
 print1(vector<int>(begin(a), end(a))); // => 4
 print2(a); // => 4
 // print3(a); // コンパイルエラー
 array<int, 4> b = a;
 for(auto& i : b){ cout << i; } // => 4320
}
```
と、大分直感的になります。
今後、C++においてはarrayの方を配列と呼ぶ事になると嬉しいという希望的推測
(ついでにvectorへの変換もうちょいスムーズになって欲しい)

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る