中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-07-29 15:38:52 來源:億速云 閱讀:111 作者: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

阿荣旗| 垦利县| 伊金霍洛旗| 博野县| 丰县| 安远县| 光山县| 连平县| 垫江县| 荆州市| 侯马市| 革吉县| 镇江市| 兴文县| 庆城县| 台东县| 昭平县| 兴仁县| 郎溪县| 项城市| 台山市| 万年县| 遂宁市| 贺州市| 丰县| 铜山县| 涿鹿县| 长治县| 揭阳市| 湖口县| 绥中县| 大化| 苍梧县| 上杭县| 泽库县| 夏邑县| 务川| 洛阳市| 兴国县| 金沙县| 石柱|