一个简单的问题:为什么C ++ 11没有为创建std::string
提供“用户 - ”(实际上是标准库)定义的文字,例如
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中吗?
答案 0 :(得分:20)
用户定义的文字在C ++ 11中是新的,不包括在内,但它在C ++ 14中(在§21.7中,如果有人关心的话)。是的,它使用s
作为后缀。精确的结果类型取决于字符串文字本身的类型 - “narrow”字面值为std::string
,u16字面值为u16string
,u32字面值为u32string
。哦,是的,如果你坚持使用一个宽字符串文字,它将产生一个wstring
。
请注意,s
后缀也用于表示秒(在<chrono>
中定义),但两者之间没有真正的冲突 - 字符串文字上的s
表示字符串,数字上的s
表示秒数。