C++中怎么自定义字面量
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇文章给大家分享的是有关C++中怎么自定义字面量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。change_speed(Speed s
千家信息网最后更新 2025年02月04日C++中怎么自定义字面量
本篇文章给大家分享的是有关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(doubleval) :meters(val) {} long double meters{ 0 };};
我们可以定义如下的字面量运算符用以支持m和km单位:
Distance operator""km(long doubleval){ return Distance(val * 1000);}Distance operator""m(long doubleval){ 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(doubleval):seconds(val) {} long double seconds{ 0 };};Time operator""sec(long doubleval){ return Time(val);}Time operator""hour(long doubleval){ 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(doubleval) :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++中怎么自定义字面量,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
运算
字面
运算符
支持
C++
单位
就是
更多
知识
篇文章
语言
工作
合法
实用
一般来讲
接下来
代码
写法
函数
后缀
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
清远市水利局服务器采购
北京字节跳动网络技术公司产品
软件开发专业研究生院校排名
网络管理的服务器搭建
键值数据库怎么存储
jps数据库操作实验报告
购买云服务器吗
追星网络安全
体现面向对象软件开发过程
IPHONE变脸软件开发
山东华为服务器虚拟化优化云空间
哎呀登录服务器
奉贤区电子软件开发欢迎咨询
服务器能做到只限角色回档
2018网络安全法的特点
一般数据库的文件名字
远程连接数据库传输数据
网络技术与交换技术
10.蜂巢互联网科技集团
新网络安全意识
摩拜数据库
自建书签服务器
深圳软件开发工资多高
公安网的网络安全概述
天津暖暖科技互联网
华为和微信运动同步数据库
java软件开发所学课程
网络技术部门志愿者
关于网络安全心里漫画
数据库加花