当我在C ++中做声明时,
static const int SECS = 60 * MINUTE;
const static int SECS = 60 * MINUTE;
这两者有什么区别吗?
答案 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指向的位置)。