gpt4 book ai didi

c++ - std::result_of 用于左值/右值参数

转载 作者:行者123 更新时间:2023-11-30 01:43:25 29 4
gpt4 key购买 nike

我在玩游戏时注意到 std::result_of 的这种行为:

struct Foo {
int operator()(const int&) const { ... }
char operator()(int&&) const { ... }
};

result_of_t<Foo(const int&)> a; // int
result_of_t<Foo(int&&)> b; // char
result_of_t<Foo(int)> c; // char -- why?

为什么 std::result_of 更喜欢在第三种情况下采用右值引用的函数?

最佳答案

std::result_of当给定的非引用参数假定它们是右值时。

事实上,std::result_of_t<A(B)>std::result_of_t<A(B&&)>相同在几乎所有情况下。

可以看到一些possibile implementations here如果你想知道为什么。基本上,result_of_t<A(B)>decltype( std::declval<A>()(std::declval<B>()) ) (忽略成员函数指针的情况),和一个 B&&右值引用和临时 B将调用任何 operator() 的相同重载在 A 上.

关于c++ - std::result_of 用于左值/右值参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843238/

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