簡體   English   中英

C ++返回類型限定符天堂

[英]C++ return type qualifiers heaven

實際上真是太棒了。 有人可以用簡單的英語解釋為什么下面的部分工作與否?

class Hey;

class Bitmap {

public:
    const Hey* const& getHey() { return hey; }; // works
    const Hey* & getHey2() { return hey; }; // error C2440: 'return' : cannot convert from 'Hey *' to 'const Hey *&'

private:
    Hey* hey;
};

您不能添加const的指針不止一種深這本身不是const ,因為這樣你可以一個東西的地址const變量成非const指針。 考慮:

char c;
char* p = &c;
const char* cp = p; // ok, only one type deep
const char x;
cp = &x; // ok
const char*& r = p; // fail, because...
r = cp; // ok
*p = 5; // ok, would overwrite a const variable if binding r to p were allowed

使指針const以不同的方式防止這種災難。 繼續這個例子:

const char* const& cr = p; // ok
cr = cp; // fail, cr is const, saving us from...
*p = 5; // would overwrite a const variable if cr = cp were allowed

const引用可以初始化為不同類型的對象或rvalue,例如常量表達式:

  const int i = 42;
  //  legal for const references only
  const int &r = i;

對於nonconst引用,相同的初始化是不合法的。

您正嘗試使用const表達式初始化引用。 Const表達式是rvalue。 const引用可以用rvalue初始化,而非const不能。

編輯 :關於你可以在弱視中閱讀的值和右值

編譯器沒有看到“Hey *”和“const Hey *”相同,所以它不想轉換引用,而他轉換const引用(類似於參數轉換)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM