const关键字的用法
2012-03-17 16:07
274 查看
一 概述
被const修饰的变量都是只读的,当你的程序改变其值的时候,编译器会报错。const一般用来修饰变量,函数的参数,返回值和函数本身等。
1.1 修饰变量
const int a = 10; //定义一个const的int变量
const char * p = "hello world"; //const字符串
char * const p = "hello world"; //const指针p
const char * const p = "hello world"; //指向const字符串的const指针p1.2 函数参数
const只能修饰输入参数:输入参数采用指针传递的时候,使用const可以防止意外改变指针所指的值,比如 void strcopy( char * strdest, const char * strsrc);
如果参数是值传递的话,那么就不用加上const修饰了,因为值传递的原理是申请一个临时的变量,将参数赋值给该变量,因此对临时变量的操作不会影响到原来变量的值。
对于非内部数据类型的变量:void func(String a),如果不采用引用传递的话,函数效率很低,会调用函数的构造函数和析构函数来建立一个临时的String对象,加了引用后,如果程序中要改变参数的话,这样是不行的,我们需要加上const,正确的形式为:void func(const String &a)。对于内部数据直接值传递就好了,因为不会有构造函数和析构函数的产生。
1.3 返回值
(1)如果给采用指针传递的方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能修改,该返回值只能赋值给加了const修饰的同类型指针。
const char * GetString(void);
const char * p = GetString();
(2) 如果函数采用了值传递的方式,那么不需要加const,因为函数会把返回值复制到外部临时的存储单元中。
int GetInt(void) 错误的形式:const int GetInt(void)
(3) 函数采用引用传递的场合不多,这种方式一般只出现在类的赋值函数中,是为了方便连续赋值。
String strOne, strTwo, strThree;
strOne = strTwo = strThree;
1.4 cosnt成员函数
任何不会修改数据成员的函数应该声明为const类型,在const函数中修改了成员变量或者调用了非const函数,编译器都会报错。
class Stack
{
public:
void Push(int a);
int Pop(void);
int GetCount(void) const;
private:
int m_num;
int m_data[5];
};
int Stack::GetCount(void) const
{
Push(1); //非const函数
++m_num; // 改变成员变量的值
return m_num;
}
用好了const可以给你的程序带来很好的健壮性和高效率性
被const修饰的变量都是只读的,当你的程序改变其值的时候,编译器会报错。const一般用来修饰变量,函数的参数,返回值和函数本身等。
1.1 修饰变量
const int a = 10; //定义一个const的int变量
const char * p = "hello world"; //const字符串
char * const p = "hello world"; //const指针p
const char * const p = "hello world"; //指向const字符串的const指针p1.2 函数参数
const只能修饰输入参数:输入参数采用指针传递的时候,使用const可以防止意外改变指针所指的值,比如 void strcopy( char * strdest, const char * strsrc);
如果参数是值传递的话,那么就不用加上const修饰了,因为值传递的原理是申请一个临时的变量,将参数赋值给该变量,因此对临时变量的操作不会影响到原来变量的值。
对于非内部数据类型的变量:void func(String a),如果不采用引用传递的话,函数效率很低,会调用函数的构造函数和析构函数来建立一个临时的String对象,加了引用后,如果程序中要改变参数的话,这样是不行的,我们需要加上const,正确的形式为:void func(const String &a)。对于内部数据直接值传递就好了,因为不会有构造函数和析构函数的产生。
1.3 返回值
(1)如果给采用指针传递的方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能修改,该返回值只能赋值给加了const修饰的同类型指针。
const char * GetString(void);
const char * p = GetString();
(2) 如果函数采用了值传递的方式,那么不需要加const,因为函数会把返回值复制到外部临时的存储单元中。
int GetInt(void) 错误的形式:const int GetInt(void)
(3) 函数采用引用传递的场合不多,这种方式一般只出现在类的赋值函数中,是为了方便连续赋值。
String strOne, strTwo, strThree;
strOne = strTwo = strThree;
1.4 cosnt成员函数
任何不会修改数据成员的函数应该声明为const类型,在const函数中修改了成员变量或者调用了非const函数,编译器都会报错。
class Stack
{
public:
void Push(int a);
int Pop(void);
int GetCount(void) const;
private:
int m_num;
int m_data[5];
};
int Stack::GetCount(void) const
{
Push(1); //非const函数
++m_num; // 改变成员变量的值
return m_num;
}
用好了const可以给你的程序带来很好的健壮性和高效率性
相关文章推荐
- C++关键字Const的用法小结
- const关键字的用法总结(多篇文章)
- const关键字用法
- c/c++中关键字static和const的用法
- const关键字的用法
- static,const,auto各个关键字的作用域和用法
- C语言中const关键字的用法
- 关于C的关键字——const的理解和用法
- C++关键字const基本用法
- c++/c语言 const关键字用法总结
- php中static和const关键字用法分析
- 关于关键字const用法的若干总结
- C的关键字——const的理解和用法
- 详解C语言中const关键字的用法
- const关键字的几种常用用法
- 标准C++中const关键字的用法总结
- C语言中const关键字的用法
- C++常对象精讲_const关键字的用法
- C/C++中关键字static,const,inline,define,typedef的用法及其意义
- const关键字的用法