首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用户定义的文字为C++添加了哪些新功能?

用户定义的文字为C++添加了哪些新功能?
EN

Stack Overflow用户
提问于 2008-10-26 09:53:30
回答 12查看 37.5K关注 0票数 144

C++11引入了user-defined literals,它允许在现有文字(inthexstringfloat)的基础上引入新的文字语法,以便任何类型都可以有文字表示。

示例:

代码语言:javascript
复制
// 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月的最终草案

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/237804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档