温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中怎么自定义字面量

发布时间:2021-07-29 15:38:52 来源:亿速云 阅读:106 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关C++中怎么自定义字面量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

change_speed(Speed s);    // better: the meaning of s is specified                          // 较好:定义了s的含义// ...change_speed(2.3);        // error: no unit 错误:没有单位change_speed(23m / 10s);  // meters per second 米每

第1行是函数声明,第4行是简单的调用调用都没有什么可说的,第5行就不一样了:竟然可以支持带单位运算!

一般来讲,C++或者C语言都支持类似于25L之类的写法,这里的L就是字面量运算符。从C++11开始,C++语言引入的一项技术:通过重载operator ""(双引号)后缀运算符实现的(称为literal operator,字面量运算符)。

假设我们有如下一个Distance类:

struct Distance{    explicit Distance(double val) :meters(val) {}    long double meters{ 0 };};

我们可以定义如下的字面量运算符用以支持m和km单位:

Distance operator""km(long double val){  return Distance(val * 1000);}Distance operator""m(long double val){  return Distance(val);}Distance operator""km(unsigned long long val){  return Distance(val * 1000);}Distance operator""m(unsigned long long val){  return Distance(val);}

经过这样的定义之后,以下的代码都是合法的:

Distance d0{ 1000 };Distance d1{ 1.0km };

其中第二种形式定义d1之后,d1.meters的值是1000。我们也可以以同样的方式定义一个Time类,这个类支持sec和hour单位:

struct Time{    explicit Time(double val):seconds(val)    {}    long double seconds{ 0 };};Time operator""sec(long double val){    return Time(val);}Time operator""hour(long double val){    return Time(val * 3600);}Time operator""sec(unsigned long long val){    return Time(val);}Time operator""hour(unsigned long long val){    return Time(val * 3600);}

接下来的定义支持除法运算符的Speed类就是常规操作了:

struct Speed{    explicit Speed(double val) :speed(val)    {}    long double speed;};Speed operator /(Distance d, Time t){    return Speed(d.meters / t.seconds);}

这些准备工作完成之后,就可以像下面这样编程了:

int main(){    Distance d0{ 1000 };    Distance d1{ 1000.0m };    Time t1{ 2.0hour };    Speed s1(d1 / t1);    std::cout << "s1=" << s1.speed << "m/s" << std::endl;    Speed s2{ 7.8km / 1sec };    std::cout << "s2=" << s2.speed << "m/s" << std::endl;    return 0;}

以上就是C++中怎么自定义字面量,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI