C++ 如何声明constexpr C字符串?

C++ 如何声明constexpr C字符串?,c++,constexpr,c-strings,string-literals,C++,Constexpr,C Strings,String Literals,我想我非常理解如何使用关键字constexpr来表示简单的变量类型,但当涉及到值指针时,我感到困惑 我想声明一个constexpr C字符串文字,其行为如下 #define my_str "hello" 这意味着编译器将C字符串文本插入我输入这个符号的每个地方,我将能够在编译时使用sizeof获得它的长度 是不是constexpr char*const my_str=“hello” 或const char*constexpr my_str=“hello” 或者constexpr char my

我想我非常理解如何使用关键字
constexpr
来表示简单的变量类型,但当涉及到值指针时,我感到困惑

我想声明一个constexpr C字符串文字,其行为如下

#define my_str "hello"
这意味着编译器将C字符串文本插入我输入这个符号的每个地方,我将能够在编译时使用sizeof获得它的长度

是不是
constexpr char*const my_str=“hello”

const char*constexpr my_str=“hello”

或者
constexpr char my_str[]=“你好”

或者是一些不同的东西?

在中,您可以使用和

那么

my_str.size()
是编译时常量

是不是
constexpr char*const my_str=“hello”

否,因为字符串文字不能转换为指向
char
的指针。(它以前是在C++11之前,但即使在那时,转换也被弃用)

const char*constexpr my_str=“hello”

否。
constexpr
无法到达那里

这将是结构合理的:

constexpr const char * my_str = "hello";
但它不能满足这一点:

这样我就可以在编译时通过sizeof等获得它的长度


或者
constexpr char my_str[]=“你好”


这是格式良好的,您确实可以使用
sizeof
在编译时获得长度。请注意,此大小是数组的大小,而不是字符串的长度,即大小包括空终止符。

好的,您真的想要一个数组还是一个指向常量文字的指针?要有“编译时长度与sizeof”,重要的不是值,而是类型。@NathanOliver:我想要一个什么,我可以放入sizeof(my_str),它会给我该字符串的字节数,而不是指针的大小。在这种情况下,“etc”是什么?然后
const char my_str[]=“hello”已经足够好了。
strlen(my_str)
也可以在编译时工作;我不确定你是否可以指望this@anatolyg不知道从哪里读到的
std::strlen
在编译时工作。哪种实现具有此功能,它不符合标准?这是一个演示;我认为他们正在使用gcc@anatolyg啊,这不是编译时计算的strlen,而是VLAs,一个非标准扩展,允许数组边界中的非常量表达式。这里有一个例子,这只是一个很小的话题;我问了一个问题,一般来说,
string\u view::data
不保证字符串以null结尾。
constexpr const char * my_str = "hello";