微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 std::declval 不是 constexpr?

如何解决为什么 std::declval 不是 constexpr?

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

static_assert(std::declval<std::array<int,4>>().size() == 4);

这是标准中的疏忽还是有更深层次的理由为什么 std::declval 不是 constexpr

解决方法

这一行:

static_assert(std::declval<std::array<int,4>>().size() == 4);

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

创建函数 constexpr 意味着它可以在运行时或编译时调用。由于根本无法调用 declval,因此将其设为 constexpr 毫无意义。我想将它设为 constexpr 不会有任何危害,但无论如何,都无所谓。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。