静态常量与常量静态(static const versus const static)

2019-06-27 03:03发布

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

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

是什么的B / W选项1和选项2的差值Δθ 他们都编译。

Answer 1:

他们的意思是完全一样的东西。 你可以自由选择任何你认为是更容易阅读。

在C语言中,你应该static的开始,但它尚未需要。 我不知道如果C ++随后在这方面℃。

6.11.5存储类型修饰符

1以外的存储类说明在声明的声明说明符的开头的位置是一个过时的特征。



Answer 2:

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-预选赛(S) 必须按照他们的资格是什么; 正交性的原因,通常应该总是把他们修改了什么之后cv修饰符(即int const ,而不是const int )。

最后,它似乎是一个普遍惯例类型之前呈现型改性剂,与所述符号性改性剂( signedunsigned )长度改性剂(前述shortlonglong long )。 这也是相当频繁掉落int如果修饰符,这样的人写的unsigned ,而不是unsigned int ,和long的,而不是long int 。 这是远未普及,但是。

鉴于此,该声明被写入第一种方式,以上是优选的,虽然它是完全可以接受的下降的int



Answer 3:

他们是一样的。 但是,我总是会去选择2,原因很简单,该关键字constint更适合当并列为它们定义的数据类型。 凡为关键字static定义变量的可访问性。



Answer 4:

他们是一样的。 看到这个讨论: http://bytes.com/topic/c/answers/140177-const-static-vs-static-const



文章来源: static const versus const static
标签: c++ class const