我刚看到一个新的C ++语法,如:
x = "abc"s;
从上下文我猜测这意味着x被分配了一个字符串" abc",我想知道这个新语法的名称,并且在C ++ 1z中是否有类似的语法?
答案 0 :(得分:11)
是的,他们自C ++ 11以来一直存在。他们被称为user-defined literals。这个特定的文字在C++14标准化了,但是很容易推出自己的文字。
#include <string>
#include <iostream>
int main()
{
using namespace std::string_literals;
std::string s1 = "abc\0\0def";
std::string s2 = "abc\0\0def"s;
std::cout << "s1: " << s1.size() << " \"" << s1 << "\"\n";
std::cout << "s2: " << s2.size() << " \"" << s2 << "\"\n";
}
例如,要创建自己的std :: string文字,您可以这样做(注意,所有用户定义的文字都必须以下划线开头):
std::string operator"" _s(const char* s, unsigned long n)
{
return std::string(s, n);
}
要使用我给出的示例,只需执行:
#include <iostream>
#include <string>
std::string operator"" _s(const char* s, unsigned long n)
{
return std::string(s, n);
}
int main(void)
{
auto s = "My message"_s;
std::cout << s << std::endl;
return 0;
}