über "int const *p" und "const int *p "

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    int i1 = 0;
    int i2 = 10;

    const int *p = &i1;
    int const *p2 = &i1;
    const int const *p3 = &i1;

    p = &i2;
    p2 = &i2;
    p3 = &i2;

    cout << *p << endl
        << *p2 <<endl
        << *p3 <<endl;
    return 0;
}

Den code kompiliert werden kann, sowohl mit VC6.0 und VC2010.
Aber ich habe Fragen als Schlag:

const int *p = &i1;

Es bedeutet, was die "p" - Punkte können nicht geändert werden,aber p kann nicht geändert werden,habe ich Recht?
so

p = &i2;

diese Linie kann erfüllt werden,ja?

Diese Zeile:

int const *p2 = &i1;

In meinem Kopf,das heißt p2 kann nicht geändert werden, während das, was p2 Punkte geändert werden kann, habe ich Recht?
Warum die

p2 = &i2;

kompiliert werden kann?

Über diese Zeile:

const const int *p3 = &i1;

p3 = &i2;

Oh,Gott... ich bin verrückt. Ich habe keine Ahnung, warum diese Zeile compiliert werden kann und kein Fehler...
Kann jede Stelle mir helfen?

Einen anderen code, das verwirrt mich hier:

class Coo2    
{      
 public:     

 Coo2() : p(new int(0)) {}    

 ~Coo2() {delete p;}    


    int const * getP() const   
    {      
         *p = 1;         
         return this->p;      
    }      

 private:    
      int* p;    
};   

warum dieser code kann kompiliert werden?
In

int const * getP() const

Habe ich den Wert ändern oder *p !

  • const Sache gilt im übrigen für die Links, es sei denn, es gibt nichts auf der linken Seite, in dem Fall gilt es das Ding auf der rechten Seite. (Ja, das ist unnötig verwirrend und albern.)
  • const am Ende bedeutet, dass keine Veränderung vorgenommen werden, um das Objekt/die Klasse.
InformationsquelleAutor Sid Zhang | 2011-03-11
Schreibe einen Kommentar