标签:
1.如果const出现在*左边,表示被指物是常量(被指物内容不能修改,但指针可以指向其他对象);如果const出现在*右边,表示指针本身是常量(指针不能再指向其他对象)
int k = 9;
const int* ptr = &k;
const * int ptr = &k;
int const* ptr = &k; //这三种方式在vc++6.0中都是可以通过编译的,都代表变量 k的值不能被修改,但指针ptr可以指向其他对象
int* const ptr = &k; //这种方式代表指针ptr不能指向其他对象
2.非常量引用不能接收常量变量(函数参数指定为非常量引用时,不能把常量作为参数传递给函数),但反过来常量变量可以接收非常量引用
#include<iostream>
using namespace std;
void fun(const int& f){ //常量引用可以接受非常量变量
cout<<"常量引用f = "<<f<<endl;
return;
}
void funf(int& f){ //非常量引用不能接受常量变量
cout<<"非常量引用f = "<<f<<endl;
return;
}
int main(){
const int gg = 99;
int g = 9;
fun(g); //将非常量变量作为实参
funf(gg); //将常量变量作为实参
return 0;
}
3.常对象不能调用一般成员函数(const成员函数不能调用non-const成员函数,但反过来non-const成员函数可以调用const成员函数)
class fun{
private:
int w;
public:
fun(int x){w = x;}
void print(){cout<<"w = "<<w<<endl;} //non-const成员函数
};
// const fun cf(666);
fun f(666);
// cf.print();//error 常对象调用一般成员函数
f.print();
4.一般不能给输出型参数(输出型参数就是让函数内部把数据输出到函数外部的)加const修饰,否则该参数会失去输出功能。const只能修饰输入型参数
#include<iostream>
using namespace std;
int multip5_3(int a, int *p) //a=30, p=&b
{
int tmp = 5 * a;
*p = tmp; //此处通过输出参数在函数内部把数据输出到函数外部
return 0;
}
int main(void)
{
int a = 30, b = 0, ret = -1;
multip5_3(a, &b); //这里的a为输入参数,b的引用为输出参数
cout<<"result = "<<b<<endl;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/xiaokaka/p/5456508.html