考えてみましょう:C++ 11オペレーター ""
struct str {};
str operator"" _X(long double d) {
return str();
}
これはウォールのstd = C++ 11
4.7.2 ++グラムと罰金が、今、私は、二重を与えた場合にコンパイル:
str operator"" _X(double d) {
return str();
}
は、私は、次のエラーメッセージが出ます: main.cppには| 3 |エラー: 'STR演算子 "" _X(ダブル)' は無効な引数のリストを持っている
問題は何ですか?これは「組み込みのリテラルサフィックスの意味を再定義することはできません」(Stroustrup FAQ)と関係がありますか? 回避策について考えてもよろしいですか?
[OK]を感謝を書くことができますので。しかし、なぜ ?つまり、二重にできないようにする文法には何かがあったのでしょうか? –
@BérengerBerthoul: 'long double'の範囲と精度がそれ以上ある場合、なぜ' double'を使用しますか?おそらくスピードやメモリ使用の理由からでしょうか?コンパイル時に実行される操作のための考慮事項ではありません。倍精度の演算を実行する場合は、関数内で常にキャストを使用できます。 –
@Ben Voigt [OK]をクリックします。私はちょうどそれがクルーギーの少しだと思うが、確かに大きな鉛はありません。ありがとう –