gpt4 book ai didi

c++ - 为什么我不能对提取运算符执行 decltype

转载 作者:搜寻专家 更新时间:2023-10-30 23:53:18 25 4
gpt4 key购买 nike

看起来这应该是合法的:

decltype(declval<istream>().operator>>(declval<istream>(), declval<int>())) test;

但是当我尝试编译时,我得到:

error C2661: std::basic_istream<char,std::char_traits<char>>::operator >>: no overloaded function takes 2 arguments

我做错了什么吗?为什么这不评估为 istream

编辑:

has been pointed因为istream& istream::operator>>(int&)是一个方法,第一个值自动传递。

但是:decltype(declval<istream>().operator>>(declval<int>())) test;错误:

error C2664: std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_streambuf<char,std::char_traits<char>> *): cannot convert argument 1 from std::ios_base::iostate to std::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &)

decltype(istream::operator >> (declval<istream>(), declval<int>())) test;错误:

error C2661: std::basic_istream<char,std::char_traits<char>>::operator >>: no overloaded function takes 2 arguments

最佳答案

operator>>这需要 int是一个成员函数(你目前正在使用成员 非成员函数的语法)并且它通过引用获取它的参数(以便它可以填充它 - declval<int>() 给你一个 int&& , 你需要 declval<int&>() 才能得到 int& ):

using T = decltype(declval<istream>().operator>>(declval<int&>()));

更好的做法是不直接调用运算符,这样您就不必担心是哪个 operator<< 了。是成员,而不是:

using T = decltype(declval<istream&>() >> declval<int&>());

关于c++ - 为什么我不能对提取运算符执行 decltype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697716/

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