C ++ 11台引入了用户定义的文字,这将允许基于现有字面引入新文本语法的(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(以ints开头),然后再评估(06_AD不用说八月和九月,0因为八进制原因而不必编写)。可以通过使语法为be来解决1974-1/6_AD此问题,以使运算符评估顺序有效,但是比较笨拙。
因此,我的问题归结为这是什么,您是否认为此功能可以证明其合理性?您还想定义哪些其他文字来使您的C ++代码更具可读性?
更新了语法以适合2011年6月的最终草案
string operator "" _s(const char*s);"不能用于解析"hello"_s"。这是一个字符串文字,将使用附加size_t参数查找运算符。我对吗?
uint16_t,用类似的类型替换其行为是依赖于实现的行为,uwrap16而unum16其行为将是与实现无关的类型,从而给定uwrap16 w=1; unum16 n=1;表达式w-2和n-2将分别产生(uwrap16)65535和(int)-1,[ uint16_t将在int16位的系统上产生第一个结果,而在int较大的系统上产生第二个结果]。我看到的最大问题是处理数字文字。
sizeof返回依赖于实现的整数类型之类的事情,IDB仍然是不可避免的,但是这种情况仍然可以比现在好很多。您如何看待这个概念?