c++ - 为什么地址运算符 ('&' ) 可以与在 C++ 中使用寄存器存储类说明符声明的对象一起使用?

标签 c++ c

在 C 编程语言中,我们不允许将地址运算符 (&) 与使用寄存器存储类说明符声明的变量一起使用。

它给出 error: address of register variable ‘var_name’ requested

但如果我们编写一个 c++ 程序并执行相同的任务(即使用带有寄存器存储变量的 &)它不会给我们任何错误。

例如。

#include <iostream>
using namespace std;
int main()
{
    register int a;
    int * ptr;
    a = 5;
    ptr = &a;
    cout << ptr << endl;
    return 0;
}

输出:-

0x7ffcfed93624

这一定是 C++ 的一个额外特性,但问题在于 C 和 C++ 中的寄存器类存储之间的区别。

最佳答案

在 C++ 中刻意删除了获取地址的限制 - 它没有任何好处,并且使语言更加复杂。 (例如,如果您将引用绑定(bind)到 register 变量会发生什么?)

register 关键字多年来一直没有多大用处 - 编译器非常擅长自行确定将什么放入寄存器。事实上,在 C++ 中,该关键字目前已被弃用,最终将被删除。

关于c++ - 为什么地址运算符 ('&' ) 可以与在 C++ 中使用寄存器存储类说明符声明的对象一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118577/

相关文章:

c - 在 c 中为队列推送中的临时分配内存时出错,来自 valgrind 的写入大小为 8 无效

c++ - 哪个 STL 容器最能满足这些需求?

c - ARM-linux4.3.2,无法打开PF_PACKET类型的socket

c - 棘手的表达式评估

c++ - 手动在场景上绘制 QPolygonF 会导致更新时出现渲染问题

python - 使用 Swig/Python 在 C 中传递多个参数和分配字符串

c - 设置指向char数组第n个地址的指针

c++ - C++语法差异:2D和1D数组(指针算术)

c++ - 将 MFC 控件传递给线程还是传递句柄?

C++ 将 char 转换为 const char*