关于c++中const的用法
2011-08-27 09:32
281 查看
1.当然最常用的还是作为常量。
(1)const int*p的用法,表示指向的值得类型不变还是int型,但p的值可以变,可以这样理解“自以为指向const的指针”,可以将非const的对象赋值给他例如可以这样:
int i=3;
int j=4;
const int*p;
p=&i;
cout<<*p<<endl;
p=&j;
cout<<*p<<endl;
这要另一个单元的值是int类型就行,其值是可以改变的,我以为其值是不可以变得,但对当前的值是不能改变的,例如*p=3;是错误的。
(2)const指针,指指针不可以变,但它所指向的值是可以变得
如:int errNumb=0;
int *const curErr=&errNumb;
currErr=currErr;//error
*currErr=9;//ok
(3)指向const对象的const指针
const double pi=9.3;
const double *const p_ptr=π
2.const能用做形参,表示传过来的对象不能改变,在程序中经常能用的到
应该将不需要修改的引用定义为const引用,非const引用形参在使用时不放变,这样的形参既不能用const对象,也不能用字面值或者产生右值的表达式实参初始化,加上速度更快,在不用改变实参的情况下应该用const的引用
3.有些类的成员函数是常函数,const可以用来做重载的标志符
只要不是static的成员函数,都隐含的有一个this指针,来引用调用它的对象,const成员函数的const隐含的改变了this形参的类型形式如下:const classname *const this;不能改变调用它的函数对象的数据成员,以前总是不知是怎么回事,现在总算是知道了
4.有的引用可以作为const类型的例如const int& p;此时可以将常量和非常量赋值给它,当将非常量赋值给它时,此时非常量也是不能改变的。此时的p可以用右值或者左值进行赋值,而对于int &p只能以此种类型的值进行赋值,而且不能用左值进行赋值。
5.const对象的动态数组
在程序的自由存储区创建内置类型的const对象时,必须为这个数组提供初始化,实现的唯一方法:
const int *p=new const int[100];//error
const int *p=new const int[100]();//ok
对于类类型必须有类的默认构造函数才行
const string *p=new const string[100];// ok
6.可以将函数的返回类型定义成const类型的引用表示,返回的是对象本身,而且这种值是不能改变的,返回的左值,所以可以给非const的返回值赋值,是在是惊讶
7.关于const在重载中的作用
对于非const的形参,其实等价的,只是复制实参的副本,并没有对实参产生实质的影响,然而对引用和指针,就不一样了,其中的const可以作为重载的条件例如以下的两个函数:
record lookup(account&);
record lookup(const account&);
当传递const对象时,只能用第二种形式,然而传递非const对象时理论上可以使用两种函数,但是选择的是第二种函数,第二种将会发生类型的转换,而非const是精确的匹配。对于指针式同样的道理
以下的函数的const不能作为函数重载的条件
f(int*);
f(int* const);
这与const变量和非const变量是同理,只是改变的是指针的副本
8.const对象定义在头文件中的一些解释
primer上面的p59,具体的还是看不懂,如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义,和其他的变量一样,在头文件中使用extern声明,以使多个文件共享,具体是什么原因,不是很懂
9.下面的不是太懂
typedef string *pstring;
const pstring cstr;
书上面的解释是typedef当成文本扩展了不是很懂,真是不懂???
(1)const int*p的用法,表示指向的值得类型不变还是int型,但p的值可以变,可以这样理解“自以为指向const的指针”,可以将非const的对象赋值给他例如可以这样:
int i=3;
int j=4;
const int*p;
p=&i;
cout<<*p<<endl;
p=&j;
cout<<*p<<endl;
这要另一个单元的值是int类型就行,其值是可以改变的,我以为其值是不可以变得,但对当前的值是不能改变的,例如*p=3;是错误的。
(2)const指针,指指针不可以变,但它所指向的值是可以变得
如:int errNumb=0;
int *const curErr=&errNumb;
currErr=currErr;//error
*currErr=9;//ok
(3)指向const对象的const指针
const double pi=9.3;
const double *const p_ptr=π
2.const能用做形参,表示传过来的对象不能改变,在程序中经常能用的到
应该将不需要修改的引用定义为const引用,非const引用形参在使用时不放变,这样的形参既不能用const对象,也不能用字面值或者产生右值的表达式实参初始化,加上速度更快,在不用改变实参的情况下应该用const的引用
3.有些类的成员函数是常函数,const可以用来做重载的标志符
只要不是static的成员函数,都隐含的有一个this指针,来引用调用它的对象,const成员函数的const隐含的改变了this形参的类型形式如下:const classname *const this;不能改变调用它的函数对象的数据成员,以前总是不知是怎么回事,现在总算是知道了
4.有的引用可以作为const类型的例如const int& p;此时可以将常量和非常量赋值给它,当将非常量赋值给它时,此时非常量也是不能改变的。此时的p可以用右值或者左值进行赋值,而对于int &p只能以此种类型的值进行赋值,而且不能用左值进行赋值。
5.const对象的动态数组
在程序的自由存储区创建内置类型的const对象时,必须为这个数组提供初始化,实现的唯一方法:
const int *p=new const int[100];//error
const int *p=new const int[100]();//ok
对于类类型必须有类的默认构造函数才行
const string *p=new const string[100];// ok
6.可以将函数的返回类型定义成const类型的引用表示,返回的是对象本身,而且这种值是不能改变的,返回的左值,所以可以给非const的返回值赋值,是在是惊讶
7.关于const在重载中的作用
对于非const的形参,其实等价的,只是复制实参的副本,并没有对实参产生实质的影响,然而对引用和指针,就不一样了,其中的const可以作为重载的条件例如以下的两个函数:
record lookup(account&);
record lookup(const account&);
当传递const对象时,只能用第二种形式,然而传递非const对象时理论上可以使用两种函数,但是选择的是第二种函数,第二种将会发生类型的转换,而非const是精确的匹配。对于指针式同样的道理
以下的函数的const不能作为函数重载的条件
f(int*);
f(int* const);
这与const变量和非const变量是同理,只是改变的是指针的副本
8.const对象定义在头文件中的一些解释
primer上面的p59,具体的还是看不懂,如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义,和其他的变量一样,在头文件中使用extern声明,以使多个文件共享,具体是什么原因,不是很懂
9.下面的不是太懂
typedef string *pstring;
const pstring cstr;
书上面的解释是typedef当成文本扩展了不是很懂,真是不懂???
相关文章推荐
- C++ 第九章 关于类和对象的进一步讨论(二)const的用法和指针数据成员
- 关于c++中const的用法详解
- C/C++语言中关于const用法的总结
- 关于C++中的const关键字的用法
- 关于const 作用和用法 C++ const 的全面总结
- C/C++语言中关于const用法的总结
- 关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性。
- C++中const、volatile、mutable的用法
- C++中 Const用法小结(转载)
- C/C++语言中const的用法
- 关于C++ const 的全面总结
- 关于C++ const 的全面总结
- c++ const 用法别人小结,我学习
- C++中关键字const和mutable的用法总结
- C++ 关于const和函数
- 关于C++ const 的全面总结
- C++中const的用法详解
- [C++] C++中const修饰指针,变量, 函数参数和函数返回值的用法总结
- 关于C++ const 的全面总结
- [c++学习]关于const使用的疑惑