溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2021-07-29 15:38:52 來源:億速云 閱讀:116 作者:Leah 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關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行是函數(shù)聲明,第4行是簡單的調(diào)用調(diào)用都沒有什么可說的,第5行就不一樣了:竟然可以支持帶單位運算!

一般來講,C++或者C語言都支持類似于25L之類的寫法,這里的L就是字面量運算符。從C++11開始,C++語言引入的一項技術:通過重載operator ""(雙引號)后綴運算符實現(xiàn)的(稱為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);}

經(jīng)過這樣的定義之后,以下的代碼都是合法的:

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類就是常規(guī)操作了:

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++中怎么自定義字面量,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

c++
AI