声明'static const'和'const static'之间有什么区别

时间:2013-11-08 08:58:31

标签: c++

当我在C ++中做声明时,

static const int SECS = 60 * MINUTE;
const static int SECS = 60 * MINUTE;

这两者有什么区别吗?

2 个答案:

答案 0 :(得分:9)

  

这两者有什么区别吗?

没有。一点也不。订单无关紧要(在这种情况下!)。

此外,如果你这样写:

const int SECS = 60 * MINUTE; //at namespace level

在命名空间级别,那么它等同于:

static const int SECS = 60 * MINUTE;

因为在命名空间级别 const变量默认情况下具有内部链接。因此static关键字在const已经存在的情况下不会执行任何操作 - 除了提高可读性之外。

现在,如果您希望变量同时具有外部链接 const,那么请使用extern

//.h file 
extern const int SECS;   //declaration

//.cpp file
extern const int SECS = 60 * MINUTE; //definition

希望有所帮助。

答案 1 :(得分:7)

const始终适用于其左侧的类型;如果没有,则适用于右侧的下一个类型。

以下三个声明

const static int SECS = 60 * MINUTE;
// or
static const int SECS = 60 * MINUTE;
// or
static int const SECS = 60 * MINUTE;

都是平等的。 static适用于整个声明;和const适用于int类型。

如果你有一个“更复杂”的类型,const的位置只会有所不同,例如引用或指针:

int a;
const int * b = a; // 1.
int * const c = a; // 2.

在这种情况下,const的位置之间存在差异 - 因为它适用于int(即它是指向const int的指针,即您无法更改该值),以及对于2.,它适用于指针(即你无法修改c指向的位置)。