41得票1回答
C++编译时计数器,重新审视

TL;DR 在阅读整篇文章之前,需要知道: 我已经找到了解决方案自己发现的,但我仍然渴望知道分析是否正确; 我将解决方案打包成了一个fameta::counter类,可以解决一些剩余的问题。你可以在github上找到它; 你可以在godbolt上使用它。 一切是如何开始的 自从Fi...

40得票2回答
常量表达式指针值

我想声明一个constexpr指针,并将其初始化为某个常量整数值,但clang一直阻止我的尝试: 尝试1: constexpr int* ptr = &42; // 错误:不能将字面值地址转换为非“constexpr”类型的指针constexpr int* x = reinterpret...

40得票3回答
constexpr和static constexpr全局变量的区别

在C++11标准中,当在头文件中定义constexpr和static constexpr全局变量时,它们之间有什么区别?更具体地说,当多个翻译单元包含相同的头文件时,哪个声明(如果有)可以保证在所有翻译单元中定义相同的变量? 例如: cexpr.h:#ifndef CEXPR_H #def...

39得票2回答
在constexpr函数中使用

下面的代码在clang++ 3.7.0下编译通过,但在g++ 5.3.1下被拒绝了。两个编译器都使用了-std=c++14选项。哪个编译器是正确的?有人知道标准中讨论了这个吗?谢谢。#include <stdexcept> using namespace std; constex...

39得票5回答
initializer_list::size() 上使用 static_assert

为什么std::initializer_list<_E>::size不能在static_assert中使用,即使它在我的libstdc++(版本4.6)中声明为constexpr? 例如,以下代码: template<class T, int Length> cla...

39得票3回答
C++检查if语句是否能够被constexpr计算

是否有一种方法可以决定某个东西是否可以进行constexpr评估,并将结果用作constexpr布尔值? 我的简化用例如下: 有没有办法判断一个东西是否能够被 constexpr 评估, 并且把结果用作 constexpr 布尔值呢?我的简单应用场景如下: template <...

39得票1回答
为什么MSVC++11会拒绝函数的constexpr限定?

所以,我在尝试使用这个简单的程序(省略了头文件),对constexpr进行一些测试时,MSVC(Visual Studio 2012)在试图用constexpr关键字限定我的函数时报错:constexpr int factorial(int n) { return n <= 1 ...

39得票5回答
C++11中是否支持is_constexpr?

在C++11中,是否有可能根据一个表达式是否为常量表达式(即constexpr),生成编译时布尔值?一些stackoverflow上的问题涉及到这个问题,但我没有看到直接的答案。

39得票2回答
使用SFINAE检测constexpr

我正在升级一些C++代码,以利用C++11中的新功能。我有一个特性类,其中有几个返回基本类型的函数,大部分时间会返回常量表达式,但并非总是如此。我想根据函数是否为constexpr来执行不同的操作。我想到了以下方法: template<typename Trait> struct...

38得票1回答
常量整数和常量求值

考虑以下程序: #include <iostream> #include <type_traits> constexpr int f() { if (std::is_constant_evaluated()) return -1; else retu...