c++ - 可以将空字符串文字传递给用户定义的原始文字运算符吗?

标签 c++ c++11 string-literals user-defined-literals

考虑以下简单的用户定义的原始文字运算符:

#include <string>

std::string operator""_s(const char* s) {
  return s;
}
这为我们提供了另一种更简单的方法来生成仅包含整数字符的 std::string :
auto s1 = 012345_s; // s1 is "0123456"s
auto s2 = 0_s;      // s2 is "0"s
但是是否可以使用这个原始文字运算符生成 字符串?
auto s3 = ???_s;    // s3 is ""s

最佳答案

单参数形式 T operator""_s(const char* s)只是整数和浮点类型的后备情况。
处理用户定义的字符串文字的正确方法是通过 T operator""_s(const CharT* s, size_t sz) .

#include <string>

std::string operator""_s(const char* s) {
  return s;
}

std::string operator""_s(const char* s, size_t sz) {
  return {s,sz};
}

int main()
{
    auto s1 = 012345_s;
    auto s2 = 0_s;  
    auto s3 = ""_s;
}
https://godbolt.org/z/qYM1WaKrh

关于c++ - 可以将空字符串文字传递给用户定义的原始文字运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66778370/

相关文章:

c++ - 打印存储在 C 字符串中的字符的 ASCII 代码 - 需要解释

c++ - 直接删除一个vector值怎么会导致内存泄漏呢?

c - 为什么字符串文字与指针具有可比性?

c++ - C++11 中的新保留字是什么?

c++ - 为什么字符串文字是左值而所有其他文字都是右值?

c - C中的字符串常量和字符串文字有什么区别?

c++ - 使用 DHCP 获取 IP 地址、网关、掩码和广播信息

c++ - 分析 SWIG Python 代码

c++ - 将对象类型提交给方法

c++ - 使用 move 成本低但复制成本高的对象初始化容器的首选方法是什么