我不明白我的 C++ 类中这两个语句之间的区别:
class MyClass {
public:
private:
static const int var = 0; // Option 1
const static int var = 0; // Option 2
};
选项 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
(以及 extern
等)在开始时。
还要注意,无序仅适用于声明说明符。 在随后的声明符中,cv 限定符必须遵循 他们有什么资格;出于正交性的原因,您通常应该 始终将简历限定符放在其修改内容之后(即
int const
,
而不是const int
)。
最后,呈现类型似乎是一种普遍的惯例 类型之前的修饰符,带有符号修饰符(
signed
或
unsigned
)位于长度修饰符(short
、long
或 long
long
)之前。如果修饰符是,则删除 int
的情况也相当频繁。
存在,所以人们写 unsigned
,而不是 unsigned int
,并且
long
,而不是long int
。然而,这远非普遍。
鉴于此,上面声明的第一种编写方式是 首选,尽管放弃
int
是完全可以接受的。
它们是一样的。但我总是会选择选项 1,原因很简单,关键字
const
和 int
在定义数据类型时并置时更适合。其中关键字 static
定义了该变量的可访问性。