constexpr相关内容

具有编译时验证的constexpr构造函数

我想建立一个带有constexpr-ness选项的类。而且,当然,我想利用编译时错误检查。 每个 constexpr 函数,当给定的参数不是常量表达式时,包含的构造函数必须在运行时也能工作。这就是为什么您每次在 constexpr 函数中的 static_assert 函数参数上均无法编译的原因。 因此,我读到可以使用抛出异常的机制,因为当在常量表达式上调用函数时,可以在编译时对这些异 ..
发布时间:2020-09-27 19:31:38 C/C++开发

为什么GCC在编译时不评估constexpr?

例如: 对某些内容进行分类{ public: static constexpr int seconds(int小时,整数分钟,整数秒) {返回小时* 3600 +分钟* 60 +秒; } } 然后: printf(“当时看:%d\n”,某事:: seconds(10,0,0)); 将使用g ++编译为对该函数的调用,而不是放置一个常数。 ..
发布时间:2020-09-27 19:20:54 C/C++开发

constexpr,static_assert和内联

我以前根据参数是否为 constexpr 函数重载。 > 。我正在尝试解决该问题令人失望的答案,以使它的断言功能更智能。这大概是我要尝试做的事情: 内联无效smart_assert(布尔条件){ if(is_constexpr( condition)) static_assert(condition,“ Error !!!”); 否则 断言(条件); } 基本上,这 ..
发布时间:2020-09-27 19:12:46 C/C++开发

为什么不ABS constexpr?

在 中,自C ++ 11起,存在以下两个重载: std :: intmax_t abs( std :: intmax_t n); std :: intmax_t imaxabs(std :: intmax_t n); 为什么这两个函数不是 constexpr ? 解决方案 我无法给出为什么 abs 的充分理由不能是 constexpr ..
发布时间:2020-09-27 07:03:29 C/C++开发

定义constexpr静态数据成员

因此,我知道在C ++中,静态成员可以在类内部进行初始化,前提是它们是const文字类型,如下所示 class test { public: static constexpr int stc = 1; 私人: int a = 0; int b = 0; int c = 0; }; 和静态constexpr变量 stc 可以是在编译器可以直接替换成员值的地 ..
发布时间:2020-09-27 03:58:22 C/C++开发

constexpr在非const成员函数上的用途是什么?

字面值constexpr构造函数和函数(不同vc,g ++)的类编译错误显示,在C ++ 14中, constexpr int A :: a()和 constexpr A :: a()const 可以使用。即成员函数上的 constexpr 并不表示该函数不会更改其作用的对象。 给出的示例是: 结构A { constexpr A(){} constint int a() {返回1 ..
发布时间:2020-09-27 03:47:34 C/C++开发

毕竟std :: string会最终成为我们的编译时字符串吗?

许多开发人员和库作者已经在编译时字符串方面苦苦挣扎了好几年了,因为标准(库)字符串 std :: string 要求动态内存分配,而不是constexpr。 因此,我们有很多问题和博客文章,介绍如何正确获取编译时字符串: 方便地在C ++中声明编译时字符串 在编译时将模板中的编译时字符串连接起来? C ++编译时字符串操作 (异地)使用constexpr的编译时字符串 我们 ..
发布时间:2020-09-27 03:18:24 C/C++开发

编译时constexpr错误,但运行时无开销

有一个众所周知的技巧,通过执行类似以下操作,会导致在 constexpr 函数的评估中导致编译时错误: constexpr int f(int x){ return(x!= 0)? x:抛出std :: logic_error(“哦,不!”); } 如果该函数用于 constexpr 上下文,如果 x == 0 ,您将收到编译时错误。但是,如果 f 的参数不是 con ..
发布时间:2020-09-27 01:13:16 C/C++开发