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

问题描述

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

npm run serve -- ---port 8000

这为我们提供了另一种更简单的方法生成仅包含整数字符的 #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

解决方法

单参数形式 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