您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關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++中怎么自定義字面量,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。