【发布时间】:2020-06-04 10:58:28
【问题描述】:
我有一个相对简单的用例:我想将一个特征关联到一个类,该类将返回一些用户定义的字符串,即一些用户定义的注册 ID。由于这个注册应该在编译时定义,我希望它是 constexpr 所以我写了如下内容:
template <typename T>
struct ClassRegistration
{
static constexpr std::string_view
Name();
};
template <>
struct ClassRegistration<int>
{
static constexpr std::string_view
Name()
{
return std::string_view{ "int" };
}
};
一切正常,但由于 string_view 实际上并不拥有它的缓冲区,我想知道它是否可以保证是安全的,我不只是指一个悬空指针。从我读到的字符串文字保证与程序本身的生命周期一样长(来自这个 SO Lifetime of a string literal returned by a function)。
因此,string_view 的这种用法是否安全合适?
【问题讨论】:
-
@NoSenseEtAl
static constexpr类范围内的变量是隐式的inline,所以它不应该在这里应用。 -
@HolyBlackCat 我知道,但我知道链接对于不知道的人来说可能会造成混淆......
-
谢谢@NoSenseEtAl,幸运的是那部分已经很清楚了
标签: c++ c++17 constexpr string-literals string-view