2016-06-21 11 views
1

cppreference web siteとdeclval紹介:何の定義がdeclvalのために存在していないので、それは未評価のコンテキストC++ 11 declval:「評価されていないコンテキスト」とは何ですか?

のみを使用することができることを

注意を私はISO C++ 11標準をチェックし、「のないフレーズがありません評価されていない文脈 "。これは、原則をコンパイルする際のコンセプトなのでしょうか?

ありがとうございました。規格から

+2

C++で "評価されていないオペランド"を検索する11 –

答えて

1

[第5、#7]いくつかの状況において

、未評価のオペランドが(5.2.8、5.3.3、5.3.7、 7.1.6.2)現れます。未評価のオペランドは評価されません。 [注:評価されていないオペランドでは、静的でないクラスメンバの名前が(5.1)であり、オブジェクトまたは関数の名前の 自体は の定義が必要です(3.2)。 - エンドノート]

その使用状況は次のとおり

  1. タイプ識別[セクション5.2.8]
  2. sizeof演算子[5.3.3]
  3. noexcept [5.3節。 7]などdecltype(declval<T>()) [セクション7.1.6.2]
については
  • 型指定3210だから、私が理解しているところでは、それはa + b;のようなスタンドアロン式としては使用できません。以下マッサからのコメント1として

    :上述の文脈上のもので

    、 未評価のオペランドを表す式が展開されるように、その結​​果の種類(及び、はsizeofの場合 、そのタイプのサイズ)を決定することができますが、 式の評価は決して最終的な プログラムに組み込まれません。

    例: "1 \ n"を標準出力に出力するコードを生成しません。

  • +1

    最後のフレーズを次のように変更します。 "これらのコンテキストでは、未評価のオペランドを表す式が展開され、結果の型sizeofの場合、そのタイプのサイズ)を決定することができますが、式の評価は最終的なプログラムに組み込まれることはありません。 例: 'typeof演算(STD :: COUT << "1つの\ n")&X =のstd :: COUT;' は、標準出力に "1 \ n" を印刷するためのコードを生成することはありません。 – Massa

    +0

    ありがとう、それははるかに良いです。 – Arunmu

    関連する問題