static,constexpr,const - 当它们一起使用时它们意味着什么?

时间:2016-02-24 06:53:53

标签: c++ c++11 static const constexpr

我对这些说法者感到非常沮丧,因为我了解他们自己做了什么,但我发现当他们彼此使用时很难理解。例如,野外的一些代码包含 -

namespace{
static constexpr char const *Hello[] = { "HelloString", "WorldString"};
...
}

这甚至做了什么?

  • 为什么在您已经在匿名命名空间内时使用静态。并且静态内部类是有意义的(除非你正在编写缺少命名空间的C),没有类 - 为什么??
  • 为什么要使用constexpr - 没有理由在这里使用它。不会简单的const吗?
  • 然后const *Hello对我没有意义。这里有什么不变的?字符串或指针*Hello

最糟糕的是,它编译:/。当然,它会编译,因为它们是有效的陈述,但它甚至意味着什么?

1 个答案:

答案 0 :(得分:6)

  

为什么当你已经在匿名命名空间内时使用静态?

我没有看到这里的理由,除非它是为C ++ 03兼容性而写的。

  

为什么要使用$this->db->where('lower(status) <>', 'completed'); $this->db->order_by('calldate','asc'); $q1 = $this->db->get('records'); //where and orderby applies to this query only $q2 = $this->db->get('other_records'); //where and orderby does not apply to this $data1 = $q1->result_array(); $data2 = $q2->result_array(); $data = array_merge($data1, $data2); - 这里没有理由使用它。不会有一个简单的常量吗?

同样,这里没有必要,但它确实表明它是一个编译时常量。另请注意,此处constexpr表示指针为constexpr,并且在constexpr之后无需const(请参阅下一部分)。

  

*对我没有意义。这里有什么不变的?字符串或指针* Hello?

const *Hello适用于左边,除非在这种情况下没有任何内容适用于右边。 const左侧的const表示取消引用时的指针是常量,而右侧表示它是指向某个内容的常量指针。

*

我在&#34;左边&#34;上找到this页面规则确实有助于理解复杂的声明。