0
  T const&
  const T&
  T& const   //error

上記の3つの違いは何ですか?もしそうなら&*何が起こるでしょうか?

4

1 に答える 1

5

最初の 2 つの形式は同等ですが、私は最初の形式の方がテンプレート引数の演繹について推論しやすく、が定数になるか (その前にあるものすべて) が明確になるため、私int const*は最初の形式を好みconst int*ます。

また、接頭辞構文を使用して定数ポインタを宣言する方法はありません (たとえば、型の先頭にあるint* constwhereに相当するものはありませんconst)。したがって、構文の統一性のために、常に後置バージョンを使用したいと思います。

3 番目の形式は、通常のコンテキストで使用した場合のエラーであり、テンプレート パラメーターを推定する場合と同等ですT&(参照は再割り当てできないため、ある意味で常に定数であり、const冗長と見なされます)。

に変更&する*と、最初の 2 つの形式は同じままですが、3 番目の形式は 型のオブジェクトへの定数ポインターを宣言しますT。これは、指しているオブジェクトではなく、ポインター自体が一定であることを意味することに注意してください (再割り当てはできません)。

int a = 0;
int b = 1;

int* const pA = &a;   // p cannot be reassigned, a can be modified
*pA = 42; // OK
 pA = &b; // ERROR

int const* pB = &b;   // p can be reassigned, b cannot be modified
*pB = 42; // ERROR
pB = &a; // OK

int const* const pC = &a; // p cannot be reassigned, a cannot be modified
*pC = 42; // ERROR
pC = &b; // ERROR

int& const d = a; // ERROR
于 2013-02-23T02:05:43.350 に答える