11

std::string簡単な質問: C++11 は、次のようなを作成するための「ユーザー」(実際には標準ライブラリ) 定義のリテラルを提供しないのはなぜですか?

auto str = "hello world"s; // str is a std::string

C++ と同様に、Objective-C は C スタイルの文字列と、より使いやすいライブラリ型の両方をサポートしていますNSString。ただし、C++ とは異なりNSString、文字列リテラルの前に@. 実際、リテラルにプレフィックスがないObjective-C コードを目にすることはほとんどありません。@誰もがそれを行う方法であると知っており、それを使用しNSString、続けています。

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

おそらく私は何かを見逃していますが、これは言語への非常に価値があり、リスクのない追加であるように思われるので、C++11 がそれ​​を提供しない理由を誰か知っていますか? C++14 で表示される可能性はありますか?

4

1 に答える 1

20

ユーザー定義のリテラルは、C++11 では十分に新しく、これは含まれていませんでしたが、C++14 では (§21.7 で、誰かが気にする場合に備えて) あります。はい、s接尾辞として使用します。正確な結果の型は、文字列リテラル自体の型に依存します。「狭い」リテラルは をstd::string返し、u16 リテラルは を返しu16string、u32 リテラルは. を返しu32stringます。ああ、ええ、ワイド文字列リテラルの使用を主張すると、wstring.

s接尾辞は秒 ( で定義) を意味するためにも使用されますが<chrono>、この 2 つの間に実際の競合はありませんs。文字列リテラルでは文字列を意味sし、数値では秒を意味します。

于 2014-02-26T06:27:45.423 に答える