我试图了解它是如何std::declval<T>()工作的.我知道如何使用它,并知道它的作用,主要是允许你在decltype不构造对象的情况下使用,比如
decltype(std::declval<Foo>().some_func()) my_type; // no construction of Foo
Run Code Online (Sandbox Code Playgroud)
我从cppreference.com知道std::declval<Foo>"添加"一个右值引用Foo,由于引用,折叠规则最终成为右值引用或左值引用.我的问题是为什么Foo没有调用构造函数?如何在std::declval<T>不构建模板参数的情况下实现"玩具"版本?
PS:我知道它与旧技巧不一样
(*(T*)(nullptr))
Run Code Online (Sandbox Code Playgroud)
Che*_*Alf 22
基本上,在一个sizeof或decltype表达式中,您可以调用未在任何地方实现的函数(它们需要声明,而不是实现).
例如
class Silly { private: Silly( Silly const& ) = delete; };
auto foo() -> Silly&&;
auto main() -> int
{
sizeof( foo() );
}
Run Code Online (Sandbox Code Playgroud)
链接器不应该抱怨这一点.
| 归档时间: |
|
| 查看次数: |
8022 次 |
| 最近记录: |