【问题标题】:Register specifier appearing in the function argument出现在函数参数中的寄存器说明符
【发布时间】:2014-07-11 18:51:39
【问题描述】:

我试图理解,将register 说明符应用于函数参数有什么意义。以下代码有效:

#include <iostream>

using std::cout;

struct A
{
    A(){ cout << "A\n"; } 
    ~A(){ cout << "~A\n"; }
};

void foo(register A a)
{
}

int main()
{
    cout << "first line\n";
    foo(A());
    cout << "last line\n";
}

为什么register 说明符适用于函数参数?

【问题讨论】:

  • 在任何地方应用它有什么意义?
  • 没有意义。 register 是一个无操作,无论是否应用于参数。它的存在只是为了向后兼容。话虽如此:对于大多数意图和目的来说,函数参数是一个局部变量。在某种程度上register 对局部变量有意义,它对参数同样有意义。
  • 很可能 [dcl.stc]/3 也适用于函数参数:“register 说明符暗示了这样声明的变量将被大量使用的实现。”
  • 请注意,“不推荐使用 register 关键字作为 storage-class-specifier。” [depr.register]

标签: c++ register-keyword


【解决方案1】:

register 是一个古老的关键字,它的起源可以追溯到 K&R C。它的目的是提示编译器将变量保留为处理器寄存器,而不是从内存中加载和卸载数据,这会产生开销。当您经常访问此变量时,您在将其声明为寄存器时保存的一两条指令在当时非常有价值。

从那时起,编译器在优化您的代码方面变得相当出色,而这个关键字失去了它的作用。现在大多数实现都会忽略它,除非你告诉编译器无论如何都要使用它。

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2015-04-05
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多