欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C++無法重載點符號、::、sizeof等的原因

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

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

    . (點符號) :: ?: sizeof

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

Sizeof 不能夠被重載是因為內(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ù)雜性不會帶來任何好處。

理論上來說,.(點運算符)可以通過使用和->一樣的技術(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這幾個運算符不能被重載,其他運算符都能被重載
2 重載不能改變該運算符用于內(nèi)置類型時的函義,程序員不能改變運算符+用于兩個int型時的含義。
3 運算符函數(shù)的參數(shù)至少有一個必須是類的對象或者類的對象的引用。這種規(guī)定可以防止程序員運用運算符改變內(nèi)置類型的函義。
4 重載不能改變運算符的優(yōu)先級。
5 重載不能改變運算符的結(jié)合律。
6 重載不能改變運算符操作數(shù)的個數(shù)。比如+需要兩個操作數(shù),則重載的+也必須要有兩個操作數(shù)。

上一篇:C語言簡單實現(xiàn)求n階勒讓德多項式的方法

欄    目:C語言

下一篇:C++利用鏈棧實現(xiàn)表達(dá)式求值

本文標(biāo)題:C++無法重載點符號、::、sizeof等的原因

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2286.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有