C++11引入了user-defined literals,它允许在现有文字(int
、hex
、string
、float
)的基础上引入新的文字语法,以便任何类型都可以有文字表示。
示例:
// imaginary numbers
std::complex<long double> operator "" _i(long double d) // cooked form
{
return std::complex<long double>(0, d);
}
auto val = 3.14_i; // val = complex<long double>(0, 3.14)
// binary values
int operator "" _B(const char*); // raw form
int answer = 101010_B; // answer = 42
// std::string
std::string operator "" _s(const char* str, size_t /*length*/)
{
return std::string(str);
}
auto hi = "hello"_s + " world"; // + works, "hello"_s is a string not a pointer
// units
assert(1_kg == 2.2_lb); // give or take 0.00462262 pounds
乍一看,这看起来很酷,但我想知道它到底有多适用,当我尝试使用后缀_AD
和_BC
创建日期时,我发现由于操作符的顺序,它是有问题的。1974/01/06_AD
将首先计算1974/01
(作为普通的int
),然后再计算06_AD
(更不用说8月和9月,由于八进制原因,必须在没有0
的情况下编写)。这可以通过将语法设置为1974-1/6_AD
来解决,这样操作符的求值顺序就可以工作,但它很笨拙。
所以我的问题归结起来就是,你觉得这个特性会证明它自己是正确的吗?您还想定义哪些使您的C++代码更具可读性的文字?
更新语法以适应2011年6月的最终草案
https://stackoverflow.com/questions/237804
复制相似问题