在c++里register变量已经和普通变量无区别吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c++里register变量已经和普通变量无区别吗?相关的知识,希望对你有一定的参考价值。

教科书中说定义register的变量后,变量数据存放在寄存器中,我编了段代码为什么取这个变量的地址还是内存地址?
//VisualC++6.0环境
void main()
register int a;
cout<<&a<<endl;

输出:0012FF7C

void main()
int a;
cout<<&a<<endl;

输出:0012FF7C

两次结果一样!是否说明在VC里面已经取消register本来面目,都以普通变量处理,还是中间有什么过程? 我是菜鸟希望大家别骂我

是的。

在C++中,使用 register 关键词声明的变量与不使用任何存储类型指示符(storage-class-specifier )声明的局部变量在作用上没有区别。

C++98/03标准规定,用 register 关键词声明的变量和不使用任何存储类型指示符声明的变量一样,都具有自动存储期,此外 register 关键词还提示编译器,这个变量将会经常被使用。但紧随其后,C++标准就注释说,这个提示可以被忽略。

扩展资料:

register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。

早期的C编译程序不会把变量保存在寄存器中,除非用户命令它这样做,这时register修饰符是C语言的一种很有价值的补充。

然而,随着编译程序设计技术的进步,在决定哪些变量应该被存到寄存器中时,现在的C编译环境能比程序员做出更好的决定。实际上,许多编译程序都会忽略register修饰符,因为尽管它完全合法,但它仅仅是暗示而不是命令。

参考资料来源:百度百科-C++

参考技术A 是的。在C++中,使用 register 关键词声明的变量与不使用任何存储类型指示符(storage-class-specifier )声明的局部变量在作用上没有区别。

C++98/03标准规定,用 register 关键词声明的变量和不使用任何存储类型指示符声明的变量一样,都具有自动存储期,此外 register 关键词还提示编译器,这个变量将会经常被使用。但紧随其后,C++标准就注释说,这个提示可以被忽略。换句话说,在标准C++中,register 关键词不影响程序的实际功能。C++11中, register 关键词的用法被废弃(deprecated),虽然在C++11/14中尚能使用 register 关键词声明变量,但不保证在以后还会支持这个用法。事实上,有人已经正式向C++标准委员会提议删除 register 关键词。目前,C++标准委员会尚未作出最终决定,但以目前趋势来看,很可能下一版标准就会删除用 register 声明变量这一用法。
参考技术B 是的,其实REGISTER变量只是在早期内存很小的老机器上十分有用,现在基本无用了。REGISTER的初衷是为了快速的读写一个变量,但同时十分的有限,一个程序里往往只可以定义很少的REGISTER变量。
现在已不在使用他了,他被终结了。本回答被提问者采纳
参考技术C 其实并没有取消register 只是现在的编译器都能够的根据程序中的变量使用情况,将其中的使用频率很高的变量自动设为register,儿无需人为的规定了。

如果自己指定了register变量,但是编译器如果发现不合理,也会自动的取消程序员指定的register变量
参考技术D register 当然是用来卡常了啊!

C++中的全局变量普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别。本博客从变量存储特性和标识符作用域两个角度区分这三个变量。

首先,我们来看看C++程序的内存区域是如何分配的。

从上图,我们可以看到,C++程序的内存区域分为代码区、全局数据区、堆区和栈区。其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了。而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除。

 

其次,从标识符作用域的角度,我们可以认为:

1. 全局变量和静态局部变量具有文件作用域

2. 普通局部变量具有函数作用域或者块作用域

 

以上是关于在c++里register变量已经和普通变量无区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

请问C++语言里静态变量和全局变量有啥区别?谢谢

C++个人备忘录

register定义变量的问题

全局变量 静态变量 局部变量 啥时候创建 啥时候撤销

static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

static变量static函数与普通变量普通函数的区别