我不明白我的C ++类中这两个语句之间的区别:
class MyClass {
public:
private:
const static int var = 0; // Option 1
static const int var = 0; // Option 2
};
b / w选项1和选项2有什么区别?他们都编译。
答案 0 :(得分:56)
他们的意思完全相同。您可以自由选择您认为更容易阅读的内容。
在C中, 应该在开始时放置static
,但这还不是必需的。我不确定C ++在这方面是否遵循C语言。
6.11.5存储类说明符
1除声明开头之外的存储类说明符的位置 声明中的说明符是一个过时的功能。
答案 1 :(得分:34)
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-qualifier(s)必须跟随
他们有资格获得什么;出于正交性的原因,通常应该这样做
总是把cv-qualifiers放在他们修改的内容之后(即int const
,
而不是const int
)。
最后,提出这种类型似乎是一种普遍的惯例
类型前的修饰符,带有符号修饰符(signed
或
unsigned
)在长度修饰符(short
,long
或long
long
)之前。如果修饰符是,则放弃int
也相当频繁
现在,所以人们写unsigned
,而不是unsigned int
,和
long
,而不是long int
。然而,这远非普遍。
鉴于此,上面写的声明的第一种方式是
首选,尽管删除int
是完全可以接受的。
答案 2 :(得分:6)
他们是一样的。但是我总是选择选项2,原因很简单,关键字const
和int
在定义数据类型时并列更适合。关键字static
定义该变量的可访问性的位置。
答案 3 :(得分:3)