需要澄清文字类型的定义

Mar*_*ars 20 c++

我正在阅读的这本书经常提到,在某些情况下,类型必须是文字类型,例如可以使用constexpr的类型.但唯一给出的定义是文字类型是算术类型,引用类型或指针类型.但是当我们定义一个constexpr类型时,似乎必须使用最初用文字初始化的文字或变量进行初始化.

我对什么是文字类型和什么不符合条件感到困惑.

Ker*_* SB 14

从C++ 11,3.9/10:

类型是文字类型,如果它是:

  • 标量类型; 要么
  • 参考类型; 要么
  • 一个文字类型的数组; 要么
  • 具有以下所有属性的类类型(第9节):
    • 它有一个简单的析构函数,
    • 非静态数据成员(如果有)的brace-or-equal-initializers中的每个构造函数调用和完全表达式都是一个常量表达式(5.19),
    • 它是一个聚合类型(8.5.1)或者至少有一个constexpr构造函数或构造函数模板,它不是复制或移动构造函数,并且
    • 它的所有非静态数据成员和基类都是文字类型.

所以基本上它既可以是引用,也可以是原始对象类型,或者可以以constexpr方式(带有constexpr构造函数的数组,聚合或类)从文字类型构造的东西.

  • @Comrade:是的.基本上任何非平凡的构造逻辑(尤其是动态内存分配)都会使您的类型非文字.如果你愿意,对象的状态不能只用你写下来的东西来表达; 它还取决于对象的动态历史. (4认同)
  • 什么是非文字类型的例子? (3认同)
  • @同志:`std::string`。 (3认同)
  • 因此,最常见的非文字类型是类类型,不包括上面答案中包含的特殊类类型。 (2认同)