C++中const的用途,求详解

C++语言 码拜 10年前 (2015-05-11) 911次浏览 0个评论
 
int main()
{


	const int a = 100;

	std::cout << a << std::endl;

	__asm{
		mov eax,5
		mov a,eax
	}
	std::cout << a << std::endl;
	int* b = (int*)&a;
	std::cout << *b << std::endl;

	getchar();
	return 0;
}

C++中const的用途,求详解

10分
首先const编译器会做检查,不允许你在C/C++代码中做更改,汇编则没法检查。其次你对第二个100的疑问,因为编译器优化了代码,他直接就std::cout << 100 << std::endl;,没有再从内存取值,而你指针指向则重新从内存取值。
不懂同问,debug中看a和b的值都是5,地址都一样
4分
volatile const int a = 100 这样加上就不会有问题了
3分
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
3分
修改 const 对象导致未定义行为,不要写这样的程序。
想验证下到底const是哪里限定的不能更改
引用 1 楼 pathletboy 的回复:

首先const编译器会做检查,不允许你在C/C++代码中做更改,汇编则没法检查。其次你对第二个100的疑问,因为编译器优化了代码,他直接就std::cout << 100 << std::endl;,没有再从内存取值,而你指针指向则重新从内存取值。

你说的很对!

5分
const变量不允许被修改,如果你硬性使用汇编要修改也没办法,呵呵
10分
const只是编译器的const
不是内嵌汇编器的const
更不是CPU的const
引用 9 楼 zhao4zhong1 的回复:

const只是编译器的const
不是内嵌汇编器的const
更不是CPU的const

嗯。。。已经明白了

5分
由于a是const的,所以在编译的时候,需要使用a值的地方直接被编译器替换为100,也就是不查看内存
但a的确是可以修改的,如
  __asm{
        mov eax,5
        mov a,eax
    }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++中const的用途,求详解
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!