Avr*_*dis 28 c++ static const volatile
我想知道volatile关键字与register,const和static关键字的不同用途.我不确定有什么影响,所以我想:
register volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
建议编译器将T存储在寄存器中,并且可以从外部某处修改T的值(OS,硬件,另一个线程)
const volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
程序本身不能修改T,但T可以在代码之外的某处修改.
static volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
如果T是类的数据成员,则意味着类的所有对象具有相同的T值,并且可以从外部的某处修改T.如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部的某个位置访问T. 如果T是函数中的局部变量,一旦它被初始化,它将保留在内存中直到程序结束,并且可以从外部的某个地方进行修改.
我的想法是否正确,任何有经验的C++开发人员都可以提供一个示例,其中上述内容可能在实际应用程序中使用,或者它是非常罕见的?
Alo*_*ave 33
register volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
volatile限定符意味着编译器无法应用优化或重新排序访问T,而register对于T将大量使用的编译器的提示.如果采用地址,T编译器将忽略该提示.请注意,register已弃用但仍在使用.
实际用途:
我从来没有用它从来没有感觉到它的需要,现在也无法想到.
const volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
const限定符意味着T不能通过代码修改.如果您尝试这样做,编译器将提供诊断.volatile仍然意味着与案例1相同.编译器无法优化或重新排序访问权限T.
实际用途:
static volatile int T=10;
Run Code Online (Sandbox Code Playgroud)
static存储限定符给出T静态存储持续时间(C++11§3.7)和内部链接,同时volatile仍然控制优化和重新排序.
实际用途:
volatile,除了你所需要的对象具有静态存储时间和从其他翻译单元无法访问.