constexpr 不起作用

飞翔的薄荷 2018-11-28 04:46:51
标准说constexpr 是在预编译是就计算,代码想通过constexpr确定程序自己是64还是32位,结果却不可行。

#include <iostream>


constexpr bool IsX64Fun() {
return 8 == sizeof(void *);
}


constexpr bool IsX64 = IsX64Fun();

int main() {


#if IsX64
std::cout << "我是x64" << std::endl;
#else
std::cout << "我是x86" << std::endl;
#endif

}


打印结果一直是x86.
...全文
527 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xskxzr 2018-12-06
  • 打赏
  • 举报
回复
哪个标准说的constexpr是在预编译时计算的?
林多 2018-11-30
  • 打赏
  • 举报
回复
constexpr,确实是让值在预编译的时候,确定。

但是 #if 和 #else,也是用在编译时的指令。。即在编译时,确定好了。

下述代码,依然会输出 “我是x86”,gcc5.4。


#include <iostream>

constexpr bool IsX64 = true;

int main() {

std::cout << IsX64 << std::endl;
#if IsX64
std::cout << "我是x64" << std::endl;
#else
std::cout << "我是x86" << std::endl;
#endif

}


因此,可以看出#if 在编译过程中起作用,是在 constexpr之前。。。

另外,不是加个 constexpr ,就一定会启用编译时确定这个功能的,具体可以参考网上关于constexpr的用法。
AlbertS 2018-11-30
  • 打赏
  • 举报
回复
constexpr要被废弃了吧,不要纠结,你写成函数判断一下就行了
zz_zz 2018-11-29
  • 打赏
  • 举报
回复
你百度下 #if #else #endif 和 if else 你看看他们的区别 你就知道了

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧