プログラミング言語C++ 7.4のメモ
知っていたことも知らなかったことも改めて学んだこともメモ。
- 配列からポインタへの型変換はあるが、ポインタから配列への型変換は無い
char v[] = "char"; char* p = v; // OK v = p; // NG
- a[j] == *(a+j) == *(j+a) == j[a]
std::cout << "Texas"[3] << ", " << 3["Texas"] << std::endl;
- 同じ配列内の要素を指すポインタ同士の減算は、その間の要素数を返す。おそらく、アドレスの差をsizeof(T)で割っている。
int v[10]; std::cout << &v[5] - &v[3] << std::endl; // 2
- 要素数が既知の配列に対してはrange-based forは使える。未知であれば使えない。
void f(char v[], std::size_t size) { for (auto x : v) use(x); // NG int v2[10]; for (auto x : v2) use(x); // OK }
- コンマは定数式に使えない
int bad[3, 5]; // NG
- ちなみにコンマは順次演算子
int a[3][5]; int x = a[3, 5]; // エラー: a[3, 5]はa[5]として解釈。a[5]の型はint*