似乎constexpr隐含了const,因此很常见:
constexpr int foo = 42; // no const here
但是,如果您写:
constexpr char *const str = "foo";
如果传递了-Wwrite-string标志,则GCC将生成“警告:从字符串常量到'char *'的弃用转换”。
写作:
constexpr const char *const str = "foo";
解决了这个问题。
那么constexpr const和constexpr真的一样吗?
问题在于,在变量声明中,constexpr
始终将const
-ness 应用于声明的对象;const
另一方面,可以根据位置将其应用于其他类型。
从而
constexpr const int i = 3;
constexpr int i = 3;
等价
constexpr char* p = nullptr;
constexpr char* const p = nullptr;
等价 既能使p
一个const
指针char
。
constexpr const char* p = nullptr;
constexpr const char* const p = nullptr;
是等效的。constexpr
做p
一个const
指针。将const
在const char *
品牌p
指向const char
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句