Namespaces
Variants

std::is_string_literal

来自 zh.cppreference.net
< cpp | 元
 
 
 
反射库
 
反射类型和查询
反射查询
反射布局查询
类型属性
类型属性查询
 
定义于头文件 <meta>
consteval bool is_string_literal( const char* p );
(1) (自C++26起)
consteval bool is_string_literal( const wchar_t* p );
(2) (自C++26起)
consteval bool is_string_literal( const char8_t* p );
(3) (自C++26起)
consteval bool is_string_literal( const char16_t* p );
(4) (自C++26起)
consteval bool is_string_literal( const char32_t* p );
(5) (自C++26起)

确定 p 是否指向一个字符串字面量对象中的元素。

结果按如下确定:

  • 如果 p 指向一个不能在常量表达式中使用的对象,返回 false。
  • 否则,如果 p 指向字符串字面量对象的子对象,返回 true。
  • 否则,返回 false。

参数

p - 一个字符指针

返回值

true如果 p 被静态确定指向一个字符串字面量,则为 false,否则为

。

#include <meta>

int main()
{
    constexpr const char* p = "";
    constexpr const char a[] = "";

    static_assert(std::is_string_literal(p));
    static_assert(!std::is_string_literal(a));
    static_assert(std::is_string_literal(LR"(wcahr_t)"));
    static_assert(std::is_string_literal(R"(\N{CAT})"));
}

运行此代码

define_static_string
(C++26)
将编译期字符串提升到静态存储,返回指向该静态字符串首字符的指针
(函数模板)