分类:
2008-10-13 16:34:07
int main(int argc, char* argv[])
{
const int nc = 0;
nc = 1; //修改了常量 nc,不能编译过去
return 0;
}
int main(int argc, char* argv[])
{
int n = 0;
int m = 1;
int const *p1 = &n;
int * const p2 = &n;
p1 = &m;
(*p1) = m; //这里编译出错,错误为 “error C2166: l-value specifies const object”
p2 = &m; //这里编译出错,错误为 “error C2166: l-value specifies const object”
(*p2) = m;
return 0;
}
int main(int argc, char* argv[])
{
//说明: 下面的注释(以 //D 开头)都是对上面语句执行后的注释
int n = 0;
int m = 1;
//D &m = 0x0012ff78
//D &n = 0x0012ff7c
int const *p1 = &n;
//D p1 = 0x0012ff7c, (*p1) = 0
int * const p2 = &n;
//D p2 = 0x0012ff7c, (*p2) = 0
p1 = &m;
//D p1 = 0x0012ff78[改变], (*p1) = 1[改变]
(*p2) = m;
//D p2 = 0x0012ff7c[未改变], (*p2) = 1[改变]
//D 注意,这时候, n 的值改变了, n = 1[改变]
//D p1 与 *p1 都未改变
return 0;
}
int const foo1()
{
return 0;
}
int CXXX::foo2() const
{
return 1;
}
class CXXX{
public:
//构造函数与析构函数
CXXX();
~CXXX();
//外部调用的函数
public:
int foo();
int const foo1();
int fooc() const;
int const *foop();
protected:
private:
//成员变量
public:
int m_public;
protected:
int m_protected;
private:
int m_private;
};
CXXX::CXXX()
{
m_public = 0;
m_protected = 1;
m_private = 2;
}
CXXX::~CXXX()
{
}
int CXXX::foo()
{
m_public += 100; // 编译不会产生任何的错误
m_protected += 100; // 编译不会产生任何的错误
m_protected += 100; // 编译不会产生任何的错误
return 0;
}
int const CXXX::foo1()
{
m_public += 100; // 编译不会产生任何的错误
m_protected += 100; // 编译不会产生任何的错误
m_protected += 100; // 编译不会产生任何的错误
return 1;
}
int CXXX::fooc() const
{
m_public += 100; // error C2166: l-value specifies const object
m_protected += 100; // error C2166: l-value specifies const object
m_protected += 100; // error C2166: l-value specifies const object
return 2;
}
int const *CXXX::foop()
{
return &m_protected;
}
int main(int argc, char* argv[])
{
CXXX myclass;
int n = myclass.foo();
n = myclass.foo1(); // 正确。请注意这一行,调用的函数 int const CXXX::foo1()
n = 1000; // 正确
int const nc = myclass.foo1();
int *p = myclass.foop(); // error C2440: 'initializing' : cannot convert from 'const int *' to 'int *'
const *pc = myclass.foop(); // 正确
return 0;
}