static const与const static

时间:2012-08-17 12:36:42

标签: c++ class const

我不明白我的C ++类中这两个语句之间的区别:

class MyClass {
  public:
  private:
     const static int var = 0;            // Option 1
     static const int var = 0;            // Option 2
};

b / w选项1和选项2有什么区别?他们都编译。

4 个答案:

答案 0 :(得分:56)

他们的意思完全相同。您可以自由选择您认为更容易阅读的内容。

在C中, 应该在开始时放置static,但这还不是必需的。我不确定C ++在这方面是否遵循C语言。

  

6.11.5存储类说明符

     

1除声明开头之外的存储类说明符的位置   声明中的说明符是一个过时的功能。

答案 1 :(得分:34)

staticconst(此处,无论如何)和类型(例如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)。

最后,提出这种类型似乎是一种普遍的惯例 类型前的修饰符,带有符号修饰符(signedunsigned)在长度修饰符(shortlonglong long)之前。如果修饰符是,则放弃int也相当频繁 现在,所以人们写unsigned,而不是unsigned int,和 long,而不是long int。然而,这远非普遍。

鉴于此,上面写的声明的第一种方式是 首选,尽管删除int是完全可以接受的。

答案 2 :(得分:6)

他们是一样的。但是我总是选择选项2,原因很简单,关键字constint在定义数据类型时并列更适合。关键字static定义该变量的可访问性的位置。

答案 3 :(得分:3)