gpt4 book ai didi

C++ - 语句无法解析重载函数的地址

转载 作者:IT老高 更新时间:2023-10-28 21:51:29 26 4
gpt4 key购买 nike

当我将以下内容作为独立行键入时:

std::endl;

我收到以下错误:

语句无法解析重载函数的地址

这是为什么呢?我不能把 std::endl; 写成一个独立的行吗?

谢谢。

最佳答案

std::endl 是一个函数模板。通常,它用作插入运算符 << 的参数。 .在这种情况下,operator<<有问题的流将被定义为例如ostream& operator<< ( ostream& (*f)( ostream& ) ) . f的参数类型已定义,因此编译器将知道函数的确切重载。

和这个差不多:

void f( int ){}
void f( double ) {}
void g( int ) {}
template<typename T> void ft(T){}

int main(){
f; // ambiguous
g; // unambiguous
ft; // function template of unknown type...
}

但是你可以通过一些类型提示来解决歧义:

void takes_f_int( void (*f)(int) ){}

takes_f_int( f ); // will resolve to f(int) because of `takes_f_int` signature
(void (*)(int)) f; // selects the right f explicitly
(void (*)(int)) ft; // selects the right ft explicitly

这就是 std::endl 的正常情况。当作为参数提供给 operator << 时: 有一个函数的定义

 typedef (ostream& (*f)( ostream& ) ostream_function;
ostream& operator<<( ostream&, ostream_function )

这将使编译器能够选择std::endl的正确重载当提供给例如std::cout << std::endl; .

好问题!

关于C++ - 语句无法解析重载函数的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842901/

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