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

前端之家收集整理的这篇文章主要介绍了c – static,constexpr,const – 当它们一起使用时它们意味着什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对这些说法者感到非常沮丧,因为我了解他们自己做了什么,但我发现当他们彼此使用时很难理解.例如,野外的一些代码包含 –
namespace{
static constexpr char const *Hello[] = { "HelloString","WorldString"};
...
}

这甚至做了什么?

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

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

解决方法

Why use static when you’re already inside an anonymous namespace?

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

Why use constexpr – there’s no reason to use it here. wouldn’t a simple const would do?

同样,这里没有必要,但它确实表明它是一个编译时常量.另请注意,constexpr在这里意味着指针是constexpr,并且在*之后不需要const(参见下一部分).

const *Hello doesn’t makes sense to me. What is constant here? The strings or the pointer *Hello?

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

char const * ptr = "Foo";
ptr[0] = 'B'; //error,ptr[0] is const

char * const ptr = "Foo";
ptr = new char[10]; //error,ptr is const

char const * const ptr = "Foo"; //cannot assign to either ptr or *ptr
constexpr char const* ptr = "Foo"; //same as above,constexpr replaced last const

我发现“右边”规则上的this页真的有助于理解复杂的声明.

猜你在找的C&C++相关文章