我想我完全理解如何将关键字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 [] = "hello";
或其他不同的东西?
答案 0 :(得分:16)
是
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 [] = "hello";
这个格式很好,你确实可以在sizeof
的编译时获得长度。请注意,此大小是数组的大小,而不是字符串的长度,即大小包括空终止符。
答案 1 :(得分:15)
在C++17中,您可以使用std::string_view
和string_view_literals
using namespace std::string_view_literals;
constexpr std::string_view my_str = "hello, world"sv;
然后,
my_str.size()
是编译时常量。