1. 指向const对象的非const指针(常用于函数的形参)

指针指向一个const对象,不允许通过指针修改其指向的const对象的值。
但是指针本身的值是可以修改的(可以指向另一个对象)。

void testConstPointer1()
{
	const string s1 = "alexzhou";
	const string *ps1 = &s1;
	//*ps1 = "zjh";编译错误
	cout << *ps1 << endl;
	const string s2 = "zjh";
	ps1 = &s2;
	cout << *ps1 << endl;
}

把const对象的地址赋值给一个非const对象的指针是错误的,如:
const string s1 = “alexzhou”;
string *ps1 = &s1;//error
同理不能使用void*指针保存const对象的地址,需要使用const void*。

但允许把非const对象赋值给const对象的指针。
const string *ps1;
string s3 = “zjh”;
ps1 = &s3;//ok
由于没有办法分辨ps1所指的对象是否为const,所以系统会把它所指的对象视为const的。因此不能通过ps1修改它所指的非const对象的值。

2. 指向非const对象的const指针

指针本身的值不能修改(不能指向另外一个对象),但是指针所指的对象的值是可以修改的。

void testConstPointer2()
{
	string s1 = "alexzhou";
	string s2 = "zjh";
	string s3 = "alexzhou";
	string *const ps1 = &s1;
	*ps1 = "zjh";//ok
	ps1 = &s2;//error
	ps1 = &s3;//error
}

3. 指向const对象的const指针

既不能修改指针的指向,也不能修改指针所指对象的值。

void testConstPointer()
{
	const string s1 = "alexzhou";
	const string s2 = "alexzhou";
	const string *const ps1 = &s1;
	*ps1 = "zjh";//error
	ps1 = &s2;//error
}

lua面向对象模拟简介

lua不是面向对象语言,但可以通过表(table)和元表(metatable)来模拟。table 是 lua 中唯一的一种数据结构,它可以用来描述原始的数组、符号表、集合、 记录、...

阅读全文

在c/c++中调用lua函数

上篇文章完成了在lua中调用c/c++函数,现在来实现在c/c++中调用lua函数。 首先完成lua代码,创建sum.lua: function add(x, y) return x + y; end 为了...

阅读全文

在lua中调用c/c++函数

lua是一种轻量级的脚本语言,用来扩展c和c++非常好,在游戏开发中使用很普遍。 首先下载lua,因为我是在win7下,所以我这里下载了luaforwindows,安装到F:\Lu...

阅读全文

欢迎留言