欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++無法重載點(diǎn)符號、::、sizeof等的原因

 更新時(shí)間:2016年05月22日 09:04:48   作者:weixueyuan  
這篇文章主要介紹了C++無法重載點(diǎn)符號、::、sizeof等的原因的相關(guān)資料,需要的朋友可以參考下

大多數(shù)的運(yùn)算符能夠被程序員重載。例外的是:

    . (點(diǎn)符號) :: ?: sizeof

并沒有什么根本的原因要禁止重載?:。僅僅是因?yàn)?,我沒有發(fā)現(xiàn)有哪種特殊的情況需要重載一個三元運(yùn)算符。注意一個重載了 表達(dá)式1?表達(dá)式2:表達(dá)式3 的函數(shù),不能夠保證表達(dá)式2:表達(dá)式3 中只有一個會被執(zhí)行。

Sizeof 不能夠被重載是因?yàn)閮?nèi)建的操作(built-in operations),諸如對一個指向數(shù)組的指針進(jìn)行增量操作,必須依靠它。考慮一下:

  X a[10];
  X* p = &a[3];
  X* q = &a[3];
  p++; // p 指向a[4]
  // 那么p 的整型值必須比q 的整型值大出一個sizeof(X)

所以,sizeof(X)不能由程序員來賦予一個不同的新意義,以免違反基本的語法。

在N::m 中,無論N 還是m 都不是值的表達(dá)式;N 和m 是編譯器知道的名字,::執(zhí)行一個(編譯期的)范圍解析,而不是表達(dá)式求值。你可以想象一下,允許重載x::y 的話,x 可能是一個對象而不是一個名字空間(namespace)或者一個類,這樣就會導(dǎo)致——與原來的表現(xiàn)相反——產(chǎn)生新的語法(允許 表達(dá)式1::表達(dá)式2)。很明顯,這種復(fù)雜性不會帶來任何好處。

理論上來說,.(點(diǎn)運(yùn)算符)可以通過使用和->一樣的技術(shù)來進(jìn)行重載。但是,這樣做會導(dǎo)致一個問題,那就是無法確定操作的是重載了.的對象呢,還是通過.引用的一個對象。例如:

class Y {
  public:
  void f();
  // ...
};
class X { // 假設(shè)你能重載.
  Y* p;
  Y& operator.() { return *p; }
  void f();
  // ...
};
void g(X& x){
  x.f(); // X::f 還是Y::f 還是錯誤?
}

附上C++重載的一些總結(jié)

重載操作符的限制:

1 并不是所有的操作符都能被重載。除了. ,.* ,:: ,? : ,sizeof,typeid這幾個運(yùn)算符不能被重載,其他運(yùn)算符都能被重載
2 重載不能改變該運(yùn)算符用于內(nèi)置類型時(shí)的函義,程序員不能改變運(yùn)算符+用于兩個int型時(shí)的含義。
3 運(yùn)算符函數(shù)的參數(shù)至少有一個必須是類的對象或者類的對象的引用。這種規(guī)定可以防止程序員運(yùn)用運(yùn)算符改變內(nèi)置類型的函義。
4 重載不能改變運(yùn)算符的優(yōu)先級。
5 重載不能改變運(yùn)算符的結(jié)合律。
6 重載不能改變運(yùn)算符操作數(shù)的個數(shù)。比如+需要兩個操作數(shù),則重載的+也必須要有兩個操作數(shù)。

相關(guān)文章

  • C++使用遞歸函數(shù)和棧操作逆序一個棧的算法示例

    C++使用遞歸函數(shù)和棧操作逆序一個棧的算法示例

    這篇文章主要介紹了C++使用遞歸函數(shù)和棧操作逆序一個棧的算法,結(jié)合實(shí)例形式分析了C++遞歸函數(shù)與逆序棧的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • 基于C語言實(shí)現(xiàn)迷宮游戲的示例代碼

    基于C語言實(shí)現(xiàn)迷宮游戲的示例代碼

    這篇文章主要介紹了基于C語言如何實(shí)現(xiàn)簡單的迷宮游戲,對于學(xué)習(xí)游戲開發(fā)的朋友相信有一定的借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C語言 遞歸實(shí)現(xiàn)排雷游戲

    C語言 遞歸實(shí)現(xiàn)排雷游戲

    掃雷是電腦上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,從小編第一次摸到計(jì)算機(jī)開始就玩過掃雷,雖然當(dāng)時(shí)并不理解玩法原理,但終是第一次玩電腦游戲,下面來從掃雷的前世今生講起
    2021-11-11
  • C++結(jié)構(gòu)體用法實(shí)例分析

    C++結(jié)構(gòu)體用法實(shí)例分析

    這篇文章主要介紹了C++結(jié)構(gòu)體用法,實(shí)例分析了默認(rèn)構(gòu)造函數(shù),復(fù)制構(gòu)造函數(shù),運(yùn)算符重載等使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++ Boost Array與Unordered使用介紹

    C++ Boost Array與Unordered使用介紹

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • OpenCV3實(shí)現(xiàn)車牌識別(C++版)

    OpenCV3實(shí)現(xiàn)車牌識別(C++版)

    這篇文章主要為大家詳細(xì)介紹了OpenCV3實(shí)現(xiàn)車牌識別功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++靜態(tài)成員函數(shù)和this指針詳解

    C++靜態(tài)成員函數(shù)和this指針詳解

    這篇文章主要為大家介紹了C++靜態(tài)成員函數(shù)和this指針,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 詳細(xì)分析c++ const 指針與指向const的指針

    詳細(xì)分析c++ const 指針與指向const的指針

    這篇文章主要介紹了c++ const 指針與指向const的指針的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++實(shí)現(xiàn)LeetCode(23.合并k個有序鏈表)

    C++實(shí)現(xiàn)LeetCode(23.合并k個有序鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(23.合并k個有序鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論