[英]std::result_of for lvalue/rvalue arguments
我在玩耍時注意到了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
在第三種情況下更喜歡采用右值引用的函數?
共有三個主要值類別 (lvalue,prvalue和xvalue)和三個參考限定符 (none, &
和&&
)。
顯然, &
應該指定左值類別, &&
應該指定xvalue有意義。 因此,省略的參考限定符應指定prvalue。
請注意,這與具有相應返回類型的函數所獲得的相同:
int f(); // returns prvalue int
int& f(); // returns lvalue reference to int
int&& f(); // returns xvalue reference to int
在您的情況下:
const int& f();
int&& g();
int h();
decltype(Foo{}(f())) a; // int
decltype(Foo{}(g())) b; // char
decltype(Foo{}(h())) c; // char
因此,您可以看到result_of
只是顯示了decltype
會告訴您什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.