4

重複の可能性:
typedef と const ポインターのコンテナー

コードでエラーが発生するのはなぜですか?

int main()
{
  //test code
  typedef int& Ref_to_int;
  const Ref_to_int ref = 10; 
}

エラーは次のとおりです。

エラー: タイプ 'int' のテンポラリからのタイプ 'int&' の非 const 参照の無効な初期化</p>

一時変数は const への参照にバインドできると書かれている一時変数の寿命を延ばすという記事を読みました。では、なぜ私のコードがコンパイルされないのでしょうか?

4

3 に答える 3

5

ここで、 のタイプrefは実際には is でreference to intあり、 notconst reference to intです。const 修飾子は無視されます。

$8.3.2 言う

cv 修飾子が typedef (7.1.3) またはテンプレート型引数 (14.3) を使用して導入された場合を除いて、cv 修飾子の参照は不適切な形式です。この場合、cv 修飾子は無視されます。

const Ref_to_int ref;は と同等でint& const ref;あり、 ではありませんconst int& ref

于 2011-05-20T11:32:08.570 に答える
1

typedef との混合constは、あなたが考えているようには機能しません。詳細については、この質問を参照してください。次の 2 行は同等です。

const Ref_to_int ref;
int& const ref;

あなたが探しています:

const int& ref;

これを修正する 1 つの方法は、それを typedef 自体に含めることです (ただし、おそらく名前を変更する必要があります)。

typedef const int& Ref_to_int;
于 2011-05-20T11:33:44.047 に答える
0

に指定子を追加することはできませんtypedef。マクロのようには機能しません。

あなたのコードは効果的です

int& const ref = 10;  // error

これは有効ではありません。

于 2011-05-20T11:32:49.867 に答える