簡體   English   中英

為什么 const function 可以使用 static 成員對象的非常量 function?

[英]Why const function can use a static member object's non-const function?

代碼1:

#include <iostream>
using namespace std;

class Test1 {
public:
  Test1() { num_ = 10; }
  int GetNum() { return num_; }

private:
  int num_;
};

class Test2 {
public:
  int GetNum() const { return t1_.GetNum(); }

private:
  static Test1 t1_;
};

Test1 Test2::t1_;

int main(int argc, char *argv[]) {
  Test2 t2;
  cout << t2.GetNum() << endl;
}

代碼2:

#include <iostream>
using namespace std;

class Test1 {
public:
  Test1() { num_ = 10; }
  int GetNum() { return num_; }

private:
  int num_;
};

class Test2 {
public:
  int GetNum() const { return t1_.GetNum(); }

private:
  Test1 t1_;
};

int main(int argc, char *argv[]) {
  Test2 t2;
  cout << t2.GetNum() << endl;
}

兩個代碼的區別在於code1的t1_是static。 Code1 有效。 但 Code2 引發錯誤:

錯誤:將 'const Test1' 作為 'int Test1::GetNum()' 的 'this' 參數傳遞會丟棄限定符 [-fpermissive] int GetNum() const { return t1_.GetNum(); }

為什么 Code1 可以工作?

作為非靜態數據成員, t1_在 const 成員 function 中相應地變為 const。 然后t1_.GetNum()導致錯誤,因為無法在 const object 上調用非 const 成員 function。

另一方面,static 數據成員不屬於 object; 它不會因為在 const 成員 function 中而成為 const。

暫無
暫無

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

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