c++ - 常量表达式类型定义

标签 c++ typedef constexpr

不幸的是,你不能做这样的事情:

typedef constexpr int cint;

这并不是世界末日......只需在每次需要使用 constexpr 时输入额外的 9 个字符(如果包含空格,则为 10 个字符)。

但是我已经创建了一个类,并且我希望能够创建该类的 constexpr 版本(使用非 constexpr 版本没有任何意义)。

所以我的计划是创建具有不可访问的命名空间的类,然后在我的主命名空间中创建一个 constexpr typedef,如下所示:

namespace MainNameSpace{
  namespace detail{
    class MyClass{};

  }
  typedef constexpr detail::MyClass MyClass;
}

不幸的是,我发现这是无法做到的......有什么方法可以达到类似的效果(不使用宏)?

最佳答案

typedef constexprdetail::MyClass MyClass; 没有多大意义。您正在建立一个约定,即 MyClass 是一个有效的 constexpr 类,并且您只能在 constexpr 上下文中使用它,但没有办法编译器可以仅通过该语句来保证...这一切都取决于 MyClass 的实现方式以及您在什么上下文中使用它。它是多余且毫无意义的。如果您对“编译时字符串类”感兴趣,请查看 string_view .

关于c++ - 常量表达式类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505018/

相关文章:

c++ - *.cpp 文件中的 Typedef 模板类指针

c++ - 这个 typedef 语法是如何工作的..?

c++ - 在编译时常量中为字符串文字添加下标

c++ - GNU const/纯属性与 constexpr

c++ - STL unordered_map 序列化

c++ - 用 boost spirit 分离 AST 创建和计算

c++ - 查找迭代器的值类型

c++ - 将模板函数传递给另一个采用 typedef 参数的函数

c++ - 在 C++11 中的编译时 (constexpr) 计算斐波那契数(递归方法)

c++ - constexpr operator++(int) (post-increment) 是否有任何应用