質問

クイック質問:C ++ 11では、

などのstd::stringを作成するためのリテラルを定義した「ユーザー - 」(実際、標準ライブラリ)を提供するのはなぜですか。
auto str = "hello world"s; // str is a std::string
.

C ++のように、Objective-CはCスタイルの文字列とよりユーザーフレンドリーなライブラリ型NSStringをサポートしています。ただし、C ++とは異なり、NOWは2つの間に混同されていません。実際、Literal NSStringプレフィックスを持っている場合は、Objective-Cコードを見ることは稀です。誰もがそれがそれをする方法であることを知っているだけで、@を使用してそれをオンにします。

C ++ 11ユーザ定義リテラルはこれを許可し、実際にStroustrupのC ++ 11 FAQのUDLセクションはこの例を正確に使用します。さらに、主要なアンダースコアなしのUDLは予約されているので、上記のように平野@を可能にするのに問題はないでしょう - それが他のものと衝突する可能性はありません。

おそらく私は何かが足りないように見えますが、言語への非常に貴重で危険な無効な追加になるようですので、なぜC ++ 11がそれを提供していない理由も知っていますか? C ++ 14に表示される可能性がありますか?

役に立ちましたか?

解決

ユーザー定義リテラルは、これが含まれていないことをC ++ 11で十分に新しいものでしたが、C ++ 14(誰かがいない場合は§21.7では)です。そして、sをサフィックスとして使用します。正確な結果の種類は文字列リテラルの種類によって異なります - 「狭い」リテラルはstd::stringを与える、U16リテラルはu16stringを与え、U32リテラルはu32stringを与えます。ああ、ええ、あなたが広い文字列リテラルを使用することを主張するならば、それはwstringを生成します。

sサフィックスも秒(<chrono>で定義されている)にも使用されますが、文字列リテラル上の2つのsとの間に実際の競合はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top