2012-09-05 72 views
1

我想知道,當我傳遞一個值到一個常量變量,爲什麼這個變量可以改變。常量類成員不恆定 - C++

#include <cstdio> 

struct point 
{ 
    int x, y, z; 
}; 

class A 
{ 
    public: 
     A(const point &p) : 
      p(p) 
     { 
      printf("(%d,%d,%d)\n", p.x, p.y, p.z); 
     } 

     void do_smth() 
     { 
      printf("(%d,%d,%d)\n", p.x, p.y, p.z); 
     } 

     const point &p; 
}; 

int main(int argc, const char *argv[]) 
{ 
    point p = {1, 1, 1}; 
    A a(p); 
    p.y = 4; 
    a.do_smth(); 
    return 0; 
} 

標準輸出:

(1, 1, 1) 
(1, 4, 1) 

我用沒有多餘的參數的g ++ V4.7編譯這段代碼。

+0

更改點對點 – URL87

+1

const point&p;是一個恆定參考的定義。所以參考是不變的價值。所以你可以將它分配給任何你想要的 –

回答

8

好了,A類中的Point是恆定的,但因爲它是一個參考p恆定的,你可以隨意改變p儘可能多和p的所有引用也會隨之發生改變。爲了簡化,引用只是一種奇特的指針。

4

p本身不是常量。 A.p is ...引用非const變量與const引用不會奇蹟般地使它const

0

您可以更改變量,而不是常量。您不能在do_smth()方法中更改它,請嘗試。

傳遞給某個類作爲常量根本不會改變對象。

1

const意味着該值不能通過更改,而不是根本不會改變。