int a =30; int b =40; const int * p=&a; p=&b; //注意这里,p可以在任意时候重新赋值一个新内存地址 b=80; //想想看:这里能用*pi=80;来代替吗?当然不能 printf( “%d”, *p ) ; //输出是80
int a=30; int b=40; int * const p=&a; //p=&b; 注意这里,p不能再这样重新赋值了,即不能再指向另一个新地址。 b=80; //这里能用*p=80;来代替吗?可以,这里可以通过*p修改a的值。 //请自行与前面一个例子比较。 printf( “%d”, *p ) ; //输出是80 *p=100; printf( “%d”, a ) ; //输出是100
const int n1=40; int *pi; pi=&n1;//这样可以吗?不行,VC下是编译错。const int 类型的n1的地址是不能赋值给指向int类型地址的指针pi的。否则pi岂不是能修改n1的值了吗! pi=(int* ) &n1; // 这样可以吗?强制类型转换可是C所支持的。 VC下编译通过,但是仍不能通过*pi=80来修改n1的值。去试试吧!看看具体的怎样。
const int n1=40; const int * pi; pi=&n1;//两个类型相同,可以这样赋值。n1的值无论是通过pi还是n1都不能修改的。
int n; const int * const pi=&n; //你能想象pi能够作什么操作吗?pi值不能改,也不能通过pi修改n的值。因为不管是 //*pi还是pi都是const的。
int a = 10; int& p1 = a;//正确 int& p2 = 2;//错误,需要引用左值 const int& p3 = a;//正确 const int& p4 = 4;//正确
class Fred {
public:
void inspect() const; // This member promises NOT to change *this
void mutate(); // This member function might change *this
};
void userCode(Fred& changeable, const Fred& unchangeable)
{
changeable.inspect(); // OK: doesn't change a changeable object
changeable.mutate(); // OK: changes a changeable object
unchangeable.inspect(); // OK: doesn't change an unchangeable object
unchangeable.mutate(); // ERROR: attempt to change unchangeable object
}
#include <iostream>
using namespace std;
struct A
{
void f() const { cout<<"const function f is called"<<endl; }
void f() { cout<<"non-const function f is called"<<endl; }
void g() { cout<<"non-const function g is called"<<endl; }
};
void main()
{
A a;
const A& ref_a = a;
a.f(); //calls void f(),输出:non-const function f is called<br> ref_a.f();//calls void f () const, 输出:const function f is called
a.g(); //ok, normal call <br> ref_a.g(); //error, const object can not call non-const function
}
#include <iostream>
using namespace std;
class Test
{
public:
void f(const int& arg);
private:
int value;
};
void Test::f(const int& arg) {
arg=10; //试图修改arg的值,此行将引起编译器错误 //error C2166: l-value specifies const object
cout<<"arg="<<arg<<endl;
value=20;
}
void main()
{
int i=7;
Test test;
test.f(i);
cout<<"i="<<i<<endl;
}
class Person {
public:
const string& name_good() const; // Right: the caller can't change the name
string& name_evil() const; // Wrong: the caller can change the name
.
};
void myCode(const Person& p) // You're promising not to change the Person object
{
p.name_evil() = "Igor"; // but you changed it anyway!!
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有