首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是表示std::declval不能被调用的声明?

什么是表示std::declval不能被调用的声明?
EN

Stack Overflow用户
提问于 2021-12-14 19:34:57
回答 1查看 315关注 0票数 1

cppreference偏好页 for std::declval上,它说:

不能调用返回值,因此永远不会返回值。

这是什么意思?我们用它的时候就叫它?

代码语言:javascript
复制
struct Foo { int func(){}  };

decltype(std::declval<Foo>().func()) integer;
/*                        ^
                          |                      */ 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 20:01:45

如果使用std::declval<T>,则程序格式不正确.然而,easier试图用一种大多数用户更容易理解的方式来表达这一点。

对函数的调用,或者使用函数的地址,通常都会使用该函数。但是,只有在实际计算调用/地址时才会发生这种情况。因此,只要没有对调用进行评估,调用std::declval<T>是合法的。(请注意,仅仅证明调用永远不会在运行时发生是不够的。相反,调用必须发生在某些类型的上下文中,在这些上下文中,语言的规则无法对其进行计算。因此,编译器始终可以检查此条件。)

decltype不计算它的操作数,所以在decltype中调用std::declval<T>通常是合法的。但是,在某些情况下,操作数的部分无论如何都要进行计算。例如,decltype(std::array<int, std::declval<int>()>)不会编译,因为它将尝试计算std::declval<int>()以获得数组的大小。

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

https://stackoverflow.com/questions/70354647

复制
相关文章

相似问题

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