const-vs-constexpr-on-variablesconstexpr VS常量VS constexpr常量
什么的家伙说,大约constexpr是正确if double
使用(或课程的float
)。但是,如果将var类型从double
更改为像int,char等整数类型,则一切正常。为什么会发生?
int main()
{
const int PI1 = 3;
constexpr int PI2 = 3;
constexpr int PI3 = PI1; // works
static_assert(PI1 == 3, ""); // works
const double PI1__ = 3.0;
constexpr double PI2__ = 3.0;
constexpr double PI3__ = PI1__; // error
static_assert(PI1__ == 3.0, ""); // error
return 0;
}
Update
:下面一行是错误的,我的意思是PI3__ = PI1__
constexpr double PI3__ = PI1; // I meant PI1__
问题:
为什么
const int = 3
是编译时间常数,但const double = 3.0
不是?我有什么理由要使用
constexpr const int val;
而不是constexpr int val
?他们似乎都完全一样。
你使用哪种编译器? 'static_assert(PI1__ == 3,“”);'不允许sinc'PI1__'不是编译时常量。 – HelloWorld
@HelloWorld我知道这是行不通的。我的问题是为什么改变它为int使它工作。我正在使用GCC 5.1和VS 2015 Update 2. – James
因为通过标准'const int'是一个编译时间常量,但是'const double'不是。 – SergeyA