Ram*_*m-Z 2 c++ g++ constexpr clang++ c++14
为了constexpr
在编译时强制对函数求值,我应该能够将它的返回值赋给一个constexpr
变量。
constexpr bool const_d_ref(const double& v) { return false; }
int main() {
constexpr double dd = 0.0;
constexpr bool cb = const_d_ref(dd);
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于g++
和clang++
。
为了对constexpr
消费者隐藏,我将实际的函数定义移到 中namespace detail
,创建一个新函数,该函数将返回值分配给一个constexpr
变量并返回它。
namespace detail {
constexpr bool const_d_ref(const double& v) { return false; }
}
constexpr bool const_d_ref(const double& v) {
constexpr bool b = detail::const_d_ref(v);
return b;
}
int main() {
constexpr double dd = 0.0;
bool b = const_t_ref(dd);
constexpr bool cb = detail::const_t_ref(dd);
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作g++
,但clang++
返回编译器错误:
错误:constexpr 变量“b”必须由常量表达式初始化
我的所作所为是允许的吗?还是clang
被限制了?或者是gcc
被宽容?
v
inconstexpr bool const_d_ref(const double& v) {
不是编译时表达式。因此detail::const_d_ref(v)
也不是编译时表达式。
如果您更改b
为const
:
const bool b = detail::const_d_ref(v);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1539 次 |
最近记录: |