为什么 std::string 没有标准定义的文字后缀?
Why no standard-defined literal suffix for std::string?
一个简单的问题:为什么C++11不提供"user-"(实际上是标准库)定义的文字来创建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吗?
用户定义的文字在 C++11 中足够新,因此不包括在内,但它在 C++14(在 §21.7 中,以防有人关心)。是的,它使用s
作为后缀。精确的结果类型取决于字符串文字本身的类型——"窄"文字给出std::string
,u16 文字给出u16string
,u32 文字给出u32string
。哦,是的,如果您坚持使用宽字符串文字,它将产生wstring
。
请注意,s
后缀也用于表示秒(在<chrono>
中定义),但两者之间没有真正的冲突——字符串文字上的s
表示字符串,数字上的s
表示秒。
相关文章:
- 增量运算符与后缀混淆
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 将数字打印成文字
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 如何在OpenSSL库的名称中添加后缀'd'?
- C++17 十六进制浮点文字单精度后缀冲突?
- 常量函数,当其参数是对文字类型的引用时
- 使用带有链表的堆栈数据结构将中缀转换为后缀
- 连接 LPCSTR 变量和文字?
- 是否可以为字符串文字创建模板的用户定义文字(文字后缀)
- 在C 中的用户输入上加上长的双文字后缀
- 为什么 std::string 没有标准定义的文字后缀?
- 长双文字的C++后缀是什么?
- C++中是否有一个浮点文字后缀来使数字的精度翻倍
- 数字文字上的ULL后缀