Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数返回类型是否影响重载的选择?_C++_C++11 - Fatal编程技术网

C++ 函数返回类型是否影响重载的选择?

C++ 函数返回类型是否影响重载的选择?,c++,c++11,C++,C++11,在post中,建议使用以下方法定义运算符返回类型本身并不重要。提出的技术依赖于SFINAE(替换失败不是错误)在声明对实例化无效时移除重载。也就是说,当编译器尝试实例化上述操作符时,返回类型本身并不重要。提出的技术依赖于SFINAE(替换失败不是错误)在声明对实例化无效时移除重载。也就是说,当编译器尝试实例化上述运算符时,此行为不是由于重载解析规则,而是由于模板参数推断规则。特别是SFINAE(又名替换失败不是错误) 在模板参数推导中,编译器将尝试实例化函数,但如果输入参数t没有成员函数dump

在post中,建议使用以下方法定义
运算符返回类型本身并不重要。提出的技术依赖于SFINAE(替换失败不是错误)在声明对实例化无效时移除重载。也就是说,当编译器尝试实例化上述
操作符时,返回类型本身并不重要。提出的技术依赖于SFINAE(替换失败不是错误)在声明对实例化无效时移除重载。也就是说,当编译器尝试实例化上述
运算符时,此行为不是由于重载解析规则,而是由于模板参数推断规则。特别是SFINAE(又名替换失败不是错误)


在模板参数推导中,编译器将尝试实例化函数,但如果输入参数
t
没有成员函数
dump
,它不会发布错误,而是将其视为替换失败,因此它不会实例化模板。

< P>此行为不属于过载解决规则,而是归因于模板参数推导规则。特别是SFINAE(又名替换失败不是错误)


在模板参数推导中,编译器将尝试实例化函数,但如果输入参数
t
没有成员函数
dump
,它不会发出错误,而是将它视为替换失败,因此它不会实例化模板。

技术被称为sFIFE。技术被称为sFIAE。但它是一种编译器技术?@ AlWORSELIMPON:SFANEA只是一个C++语言规则组合的名称。人们用“SFINAE”来描述正在做的事情,而不是描述合谋做一些有用的事情的语言规则。我认为SFINAE是一种编程技术(根据模板参数的属性控制重载集)。没有这个规则,很多模板都无法编写。程序员们知道,他们可以利用它来做很多很酷的事情,比如检查某些成员函数是否存在。那么,SIFAE不是编程技术,而是编译器技术,这是正确的吗?@ AlnsLeave:SfEANA只是一个C++语言规则组合的名称。人们用“SFINAE”来描述正在做的事情,而不是描述合谋做一些有用的事情的语言规则。我认为SFINAE是一种编程技术(根据模板参数的属性控制重载集)。没有这个规则,很多模板都无法编写。程序员了解到他们可以利用它做很多很酷的事情,比如检查某些成员函数是否存在等。
template <typename T, typename charT>
auto operator<< (std::basic_ostream<charT> & str, const T & t) -> decltype(t.dump(str))
{
    return t.dump(str);
}