首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么std::declval不是constexpr?

为什么std::declval不是constexpr?
EN

Stack Overflow用户
提问于 2021-02-26 23:45:57
回答 1查看 139关注 0票数 2

问题是-为什么这样的代码在cpp中是非法的?

代码语言:javascript
复制
static_assert(std::declval>().size() == 4);

这是标准上的疏忽,还是有更深层次的原因std::declval不是constexpr?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 00:51:01

这一行:

代码语言:javascript
复制
static_assert(std::declval>().size() == 4);

编译失败,因为您正在使用declval在评估的上下文中。这是不允许的,如果你这样做了,你的程序就是错误的。declval只能在未计算的上下文中调用decltype或者sizeof。

创建一个函数constexpr意味着它既可以在运行时调用,也可以在编译时调用。因为declval根本不能被调用,做它没有意义constexpr。我想这不会有什么坏处constexpr,但无论哪种方式,这都无关紧要。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66388805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档