返回从字符串文字创建的静态string_view安全吗?

发布于 2025-01-22 19:51:38 字数 1313 浏览 0 评论 0 原文

我有一个相对简单的用例:我想将一个特征与可以返回某些用户定义的字符串的类相关联,即某些用户定义的注册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" };                                                     
    }                                                                                          
};

https://godbolt.org/z/5p8xka

一切正常,但是由于String_view实际上没有其缓冲区,所以我想知道它是否保证它是安全的,我不仅指悬挂的指针。据我阅读的字符串文字可以保证只有程序本身的寿命(因此,从此)。

因此,这种使用String_view的用法是否安全且适当?

I have a relatively simple use case: I want to associate a trait to a class which will return some user defined string, namely some user-defined registration ID. As this registrations are supposed to be defined at compile-time I would like it to be constexpr so I wrote something like the following:

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" };                                                     
    }                                                                                          
};

https://godbolt.org/z/5p8xkA

Everything is working fine but as string_view doesn't actually own its buffer I wonder if it's guaranteed to be safe, that I'm not just referring to a dangling pointer. From what I read string literals are guaranteed to have the lifetime as long as that of the program itself (from this SO Lifetime of a string literal returned by a function).

Therefore, is this usage of string_view safe and appropriate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黯然#的苍凉 2025-01-29 19:51:38

字符串文字可以保证只有程序本身的寿命

正确,字符串文字就可以拥有寿命。

因此,这种使用 string_view 安全且适当吗?

是的,您的代码很好。

string literals are guaranteed to have the lifetime as long as that of the program itself

That's correct.

Therefore, is this usage of string_view safe and appropriate?

Yes, your code is fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文