C++ 获取成员函数的返回类型的大小

C++ 获取成员函数的返回类型的大小,c++,types,stl,C++,Types,Stl,我有带成员函数的类/结构。我想检查返回类型的大小是否正确 #include <iostream> #include <type_traits> struct QString { wchar_t ucs2() {return L"1"[0];} }; int main() { QString arg; std::cout << "wchar_t " << sizeof(wchar_t) << std::en

我有带成员函数的类/结构。我想检查返回类型的大小是否正确

#include <iostream>
#include <type_traits>

struct QString {
    wchar_t ucs2() {return L"1"[0];}
};

int main() {
    QString arg;
    std::cout << "wchar_t   " << sizeof(wchar_t) << std::endl;
    std::cout << "std::invoke_result_t<decltype(&QString::ucs2)(void)>   " << sizeof(std::invoke_result_t<decltype(&QString::ucs2)(void)>)  << std::endl;
}
#包括
#包括
结构QString{
wchar_t ucs2(){返回L“1”[0];}
};
int main(){
QString-arg;

std::cout
调用结果
定义为:

template< class F, class... ArgTypes>
class invoke_result;
模板
类调用结果;
因此,这是可行的

return sizeof(std::invoke_result_t<decltype(&QString::ucs2), QString>);
返回sizeof(std::invoke\u result\t);
更简单的解决方案:

int main() {
  std::cout << sizeof(QString().ucs2()) << '\n';
  return 0;
}
intmain(){
std::cout
std::invoke_result_t
应该是
std::invoke_result_t
,因为所有成员函数都将类类型作为隐式的第一个参数,但它不是为我编译的。真正奇怪的是
std::result_of_t
做了,并且给出了正确的结果。
decltype(&QString::ucs2)(void)
是不带参数并返回成员函数指针的函数类型。这是指向成员函数指针的大小。
int main() {
  std::cout << sizeof(QString().ucs2()) << '\n';
  return 0;
}