簡體   English   中英

const auto 和 const type 之間有什么區別*

[英]what's difference between const auto and const type*

為什么會發生錯誤,我認為 const auto data_0 應該與 const Data* data_1 相同,那么 data_0 和 data_1 之間有什么區別?

class Data {
public:
  Data(int val_) : val(val_) {
  }
  ~Data() {
  }
  void SetVal(int val_) {
    val = val_;
  }
private:
  int val;
};

Data* GetData(int val) {
  return new Data(val);
}

int main () {
  const auto data_0 = GetData(0);
  const Data* data_1 = GetData(0);
  data_0->SetVal(1);  // OK 
  data_1->SetVal(1);  // error: passing ‘const Data’ as ‘this’ argument discards qualifiers
  return 0;
}

const適用於它左邊的事物,除非什么都沒有,那么它適用於它右邊的事物。

const auto data_0 = GetData(0); const適用於auto推導出的任何類型,在這種情況下是Data* 所以,最終的聲明是:

Data * const data_0 = GetData(0);

const適用於指針本身,而不是它所指向的東西。 因此, data_0是一個指向非常量Data對象的常量指針。 SetVal()是一個非常量方法,因此可以在對象上調用它。

const Data* data_1 = GetData(0); const適用於Data 所以,最終的聲明是:

Data const * data_1 = GetData(0);

const適用於所指向的事物,而不適用於指針本身。 因此, data_1是一個指向 const Data對象的非常量指針。 SetVal()不是 const 方法,因此不能在對象上調用它。

const auto 和 const type 之間有什么區別*

const auto將從初始化器中推導出來,並且是一個 const 限定類型。 data_0情況下,初始化器的類型是指向非常量Data的指針,因此推導出的類型成為指向非常量Data的常量限定指針,即Data* const

const type*是指向 type type的 const 限定對象的非常量限定指針。 區別在於一個是指向const的非常量指針,另一個是指向非常量的const指針。

為什么會發生錯誤

因為你通過一個指向 const 的指針調用了一個非常量限定的成員函數。

我認為 const auto data_0 應該與 const Data* data_1 相同

不是,也不應該是。

暫無
暫無

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

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