`
v5browser
  • 浏览: 1137242 次
社区版块
存档分类
最新评论

C++ 之 const 修饰符用法 详解!

 
阅读更多
const常量限定修饰符,它把一个对象转换为常量(constant)。const对象必须初始化而且是在定义的同时。初始化后的const对象(或指针)是不能修改的。


例1:

int i = 0;
	const int j = 0; // int const j = 0;
	const int *p;  // int const *p ;可改变p但不能改变*p
	int* const p = &i;  //可改变*p但不能改变p
     const int * const p = &i; // int const  * const p = &i; p,*p都不能改变


例二: 为什么错误,为什么正确? 大家自己思考

class Test{
public:
	const int i; //正确
	int & j;     //正确
	
};

int main(){
	const int i; //编译错误  error: uninitialized const 'i'
	int & j;     //编译错误 
}

关于初始化:

一般情况下:const对象必须初始化而且是在定义的同时

如果是在类中定义的, 即常数据成员,必须要在初始化列表进行初始化!

class Test{
public:
	const int i;
	int & j;
	Test(int a,int b):i(a),j(b){
	}

};


const修饰指针:如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它。
int main()
{
	const char c[] = "boy";
	const char * p1;
	p1 = c;
	char * p2 = c; //错误! error: invalid conversion from 'const char*' to 'char*' 
	return 0;
}


const修饰成员函数:const类对象只能调用const成员函数,而const成员函数不能修改类的成员变量const成员函数若要修改某成员变量,就必须用mutable修饰该成员变量。

class Test{
public:
	int i;
	void f() const{ //错误!
		i++; 
	}
};

 error: increment of member 'Test::i' in read-only object

例2:

class Test{
public:
	int i;
	int get() const{
		return i;
	}
	void set(int a){
		i = a;
	}
};

int main(){
	const Test t; //error: uninitialized const 't'
}

int main(){
	Test t1;
	const Test t2 = t1;
	t2.get(); /正确,不能调用 t2.set();  如果把get()方法的const修饰去掉,此句也是错误!

}


const修饰函数参数:若是按值传递参数,不要用const修饰,因为这没有作用,而且容易产生误导。按值传递的函数参数最好是改为const的引用参数

class Test{
public:
	int i;
	int get() const{
		return i;
	}
	void set(const int a){
		i = a;
		a++; // error: increment of read-only parameter 'a'
	}
};



	int n;
	static int _n;

	void f(int = n);//错误!!!
       void f2(int = _n);

: error C2648: 'n' : use of member as default parameter requires static member



const修饰函数返回值:当函数返回值不是内部类型时,通常用const修饰返回值。因为函数返回值是个临时对象,这样有助于编译器检查出调用者试图修改这临时对象。


const的目的是正确性,而且没有运行的开销(编译时完成)。在C++const的正确性仅仅是类型信息的另一种形式,是把程序员头脑里的正确信息语言化。

分享到:
评论

相关推荐

    C++中的const限定修饰符

    本文给大家介绍了C++中的const限定修饰符。

    C++:浅谈修饰符const

    C++:浅谈修饰符const 魔鬼作坊学游戏辅助制作 moguizuofang.com

    c++中const关键字使用详解

    一 const基础;二 const的初始化;三 作为参数和返回值的const修饰符;四 类成员函数中const的使用;五 使用const的一些建议。

    C语言的那些小秘密之const修饰符

    或许还有不少人对于const修饰符理解的并不深刻,都只是停留在一个比较浅的层面上,仅仅是在读别人代码的时候看到了const修饰符的使用,自己的写代码的过中从未使用过,所以自然对于const修饰符比较陌生。那么到底...

    C++之const详解

    C++之const详解

    c++中const用法详解

    c++中const用法详解,引用大量实例进行分析!

    C++ 中const修饰虚函数实例详解

    C++ 中const修饰虚函数实例详解 【1】程序1 #include using namespace std; class Base { public: virtual void print() const = 0; }; class Test : public Base { public: void print(); }; void Test::print...

    const 用法详解

    const用法详解 详细介绍C++里const的用法,面试必备!!

    C++中const关键字用法详解及实例和源码下载

    现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲解了一些知识,后来在网上面搜了关于const的关键字的讲解,但是搜到的内容和书上面讲解的内容有着非常让人疑惑的东西,看看下面的...

    c++中关键字const的用法详解

    本文档详细介绍了C++中关键字const的用法,并给出了具体的示例来帮助读者理解

    C++const关键字详解

    C++中const关键字详解

    C++中const用法总结

    文件有对const修饰普通变量、指针、函数等等的详细解释,是对c++中const用法的完整总结。

    C++中const关键字详解

    C++中const关键字详解

    C++中const用法全解

    const在C++中占有重要作用,属于小兵立大功的典型,本文档详细介绍了如何使用const

    Const用法详解 C++

    Const用法详解 C++ const用法非常灵活,正确使用灵活使用是开法人员非常有好处。

    C++ 中const总结

    C++ 中const总结 const 限定符把一个对象转换成一个常量,如 const int bufSize=512; 申 明 bufSize 的时候,如果不将它初始化,那么编译器会报错:const object must be initialized if not extern。因为 bufSize ...

    C++语言const 关键字使用方法图文详解

    之前一直在学习C/C++,关于const的使用,...const使用方法 定义const对象 const修饰符可以把对象转变成常数对象,意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!任何修改

    C++中const用法总结.doc

    C++中const用法总结.doc C++中const用法总结.doc 1. const修饰普通变量和指针 2. const修饰函数参数 3. const 修饰函数返回值 4. const修饰类对象/对象指针/对象引用 5. const修饰成员变量 6. const修饰成员...

Global site tag (gtag.js) - Google Analytics