gpt4 book ai didi

c++ - std::declval() 是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 12:51:51 27 4
gpt4 key购买 nike

我想了解 std::declval<T>()作品。我知道怎么用,也知道它的作用,主要是让你用decltype不构造对象,比如

decltype(std::declval<Foo>().some_func()) my_type; // no construction of Foo

我从 cppreference.com 知道那std::declval<Foo> “添加”对 Foo 的右值引用,由于引用折叠规则最终成为右值引用或左值引用。我的问题是为什么 Foo 的构造函数不叫?如何实现std::declval<T> 的“玩具”版本?不构造模板参数?

PS:I know和老套路不一样

(*(T*)(nullptr))

最佳答案

基本上,在 sizeofdecltype 表达式中,您可以调用未在任何地方实现的函数(它们需要声明,而不是实现)。

例如

class Silly { private: Silly( Silly const& ) = delete; };

auto foo() -> Silly&&;

auto main() -> int
{
sizeof( foo() );
}

链接器不应该提示这一点。

关于c++ - std::declval<T>() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28532781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com