読者です 読者をやめる 読者になる 読者になる

情報は力ではない

VimとかC++とかCUDAとか。

プログラミング言語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*