我不明白我的 C++ 类中这两个语句之间的区别:
class MyClass {
public:
private:
static const int var = 0; // Option 1
const static int var = 0; // Option 2
};
b/w 选项 1 和选项 2 有什么区别?他们都编译。
它们的意思完全相同。您可以自由选择您认为更容易阅读的内容。
在 C 语言中,您应该放在static
开头,但这还不是必需的。我不确定 C++ 在这方面是否遵循 C。
6.11.5 存储类说明符
1 将存储类说明符放置在声明中声明说明符的开头以外的位置已过时。
static
, const
(无论如何)和类型(例如int
)都是声明说明符的一部分。 从历史上看,声明说明符是关键字和类型名称的无序列表,因此:
static unsigned int const var;
static unsigned const int var;
static int unsigned const var;
static int const unsigned var;
static const unsigned int var;
static const int unsigned var;
unsigned static int const var;
unsigned static const int var;
unsigned int static const var;
unsigned int const static var;
unsigned const static int var;
unsigned const int static var;
int static unsigned const var;
int static const unsigned var;
int unsigned static const var;
int unsigned const static var;
int const static unsigned var;
int const unsigned static var;
const static unsigned int var;
const static int unsigned var;
const unsigned static int var;
const unsigned int static var;
const int static unsigned var;
const int unsigned static var;
都是合法的,都意味着同样的事情。
我认为在 C 和 C++ 中仍然是这种情况,但如果我没记错的话,C 已经不赞成将存储类说明符 ( static
) 放在任何位置,但放在开头。无论如何,这几乎是一个普遍的约定,因此您通常应该将static
(andextern
等) 放在开头。
还要注意,无序仅适用于声明说明符。在随后的声明符中,cv-qualifier(s)必须遵循它们所限定的;出于正交性的原因,您通常应该始终将 cv 限定符放在它们修改的内容之后(即int const
,而不是const int
)。
最后,在类型之前显示类型修饰符似乎是一种普遍的约定,在长度修饰符(signed
或
unsigned
)之前带有符号修饰符short
(long
或long
long
)。int
删除if 修饰符也相当频繁,所以人们写unsigned
, 而不是unsigned int
, 和
long
, 而不是long int
。然而,这远非普遍。
鉴于此,上面的声明的第一种编写方式是首选,尽管删除int
.
他们是一样的。但我总是会选择选项 1,原因很简单,即当它们定义数据类型时,它们并列时更适合关键字const
和拟合。int
其中关键字static
定义了该变量的可访问性。