我想知道静态常量变量是否是线程安全的?
示例代码段:
void foo(int n)
{
static const char *a[] = {"foo","bar","egg","spam"};
if( ... ) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
Fer*_*cio 16
任何永远不会被修改的变量,无论它是否显式声明为const,都具有固有的线程安全性.
const并不是编译器保证变量是不可变的.const是一个承诺,你做出一个变量都不会被修改的编译器.如果你回到那个承诺,编译器将生成一个错误指向你,但你总是可以通过抛弃constness来使编译器沉默.
Jen*_*edt 13
为了真正安全,你应该这样做
static char const*const a[]
这会抑制数据的修改以及要修改的表中的所有指针.
顺便说一句,我更喜欢const在typename之后写一下,以便乍一看它const适用的地方,即它的左边.
小智 6
在您的示例中,指针本身可以被视为线程安全.它将被初始化一次,以后不会被修改.
但是,指向的内存内容根本不是线程安全的.
| 归档时间: |
|
| 查看次数: |
3812 次 |
| 最近记录: |