c const

file1.cpp

int ext;

file2.cpp

extern const int ext2=12;

apple.cpp

class apple
{
private:
	int people[100];
public:
	apple(int i);
	const int apple_number;
	void take(int num) const;
	int add(int num);
	int add(int num) const;
	int getCount() const;
};

const.cpp

#include <iostream>
#include "apple.cpp"
using namespace std;


// construct;
apple::apple(int i) :apple_number(i) {}

// 
int apple::add(int num)
{
	take(num);
	return 0;
}



int apple::add(int num) const
{
	take(num);
	return 0;
}


void apple::take(int num) const
{
	cout << "take fun" <<  num << endl;
}


int apple::getCount() const {
	take(1);
	return apple_number;
}



void f(const int i)
{
	// 用于限定不可以修改参数.
	//i++;
}

extern int ext;

// 特别注意这个, 在另外一个文件中,  是通过extern 和const 修饰的,
// 外部 extern const int ext2=12;
//  extern  int ext2;  报错,
//  const int ext2; 报错.
//  extern const  int ext2;  正常,


// 有初始值. 外部 const int ext2=12
//  extern  int ext2;  报错,
//  const int ext2; 报错.
//  extern const  int ext2;  报错,

// 无初始值. 外部 const int ext2;
//  extern  int ext2;  报错,
//  const int ext2; 报错.
//  extern const  int ext2;  报错

extern    const  int ext2;

// 总结:  
//  1 在使用了const后, 必须显示的申明为 extern ,在跨文件的模式下,  说明 const 是一个局部的.
//  2 在使用了const后, 必须显示的赋值.
//  3 在使用了const后 ,使用的地方必须类型一致.
int main()
{
	const int a = 1 + 1;

	cout << ext + 10 << endl;
	cout << ext2 + 12 << endl;


	const  int b = 10;
	//b = 0;

	const string s = "helloworld";

	cout << s << endl;

	const int* ptr = &a;
	ptr = &b;
	// *ptr = 10;   这个是错误的, 如果这么写了, 实际修改的是, 指针所指对象的值 , 
	// 说白了, 就是int对象是不可以修改的, 



	const int p = 10;
	const void* q = &p;
	//void* m = &p; 类型不匹配,  申明不可以通过q 来修改p的值. 如果是这样就容易被修改了,

	int num = 10;
	int num1 = 12;
	int* const ptr1 = &num;
	int* t = &num;

	//ptr1 = &num1;  这个错误说明了, 该指针的值是不可以修改的, 
	*ptr1 = 11;    //说明指针所指对象的值是可以修改的,  
	cout << *ptr1 << endl;
	// 如上所示, 重点修饰的是指针, 
	// 总结 :  如果const在*的左边, 则说明指针指向的对象的值不可以修改, 
	//   如果const在* 的右边, 则说明指针本身是不可以被修改的, 
		


	apple app(2);
	cout << app.getCount() << endl;
	app.add(10);
	const apple appb(3);
	appb.add(100);
	return 0;

	
	return 0;
}

博主的原文链接 : https://github.com/Light-City/CPlusPlusThings/tree/master/basic_content/const ,非常感谢博主的分享.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章