Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++ 求值语句cin==(表达式)_C++_Return Value_Cout_Cin - Fatal编程技术网

C++ 求值语句cin==(表达式)

C++ 求值语句cin==(表达式),c++,return-value,cout,cin,C++,Return Value,Cout,Cin,下面的代码打算做什么 return cin==(cout<<(f(a)==f(b)?"YES":"NO")); 提前谢谢

下面的代码打算做什么

return cin==(cout<<(f(a)==f(b)?"YES":"NO")); 

提前谢谢 C++03

这里,我们有
操作符void*()const
,它:

如果
fail()
返回
true
,则返回空指针,否则返回非空指针。此指针可隐式转换为
bool
,并可在布尔上下文中使用

因此,在表达式中:

cin==(cout<<(f(a)==f(b)?"YES":"NO")); 
C++11

在C++11中,
操作符void*()const
显式操作符bool()const
替换。
显式
是关键,因为它意味着转换函数只能显式使用(如中,通过直接转换)或在布尔上下文中使用,如:

if (cin) { // calls cin.operator bool()
}
等式不是布尔上下文,因此在表达式中

cin == cout

该转换函数将不会被调用。由于在
std::basic_ios
(或
std::istream
std::ostream
上未定义
运算符==
),因此表达式将无法编译 C++03

这里,我们有
操作符void*()const
,它:

如果
fail()
返回
true
,则返回空指针,否则返回非空指针。此指针可隐式转换为
bool
,并可在布尔上下文中使用

因此,在表达式中:

cin==(cout<<(f(a)==f(b)?"YES":"NO")); 
C++11

在C++11中,
操作符void*()const
显式操作符bool()const
替换。
显式
是关键,因为它意味着转换函数只能显式使用(如中,通过直接转换)或在布尔上下文中使用,如:

if (cin) { // calls cin.operator bool()
}
等式不是布尔上下文,因此在表达式中

cin == cout

该转换函数将不会被调用。由于在
std::basic_ios
(或
std::istream
std::ostream
上未定义
运算符==
),因此表达式将无法编译

它基本上解析为
cin==cout
,即。。。奇怪的除非这是为了检查两条流的状态是好是坏。@Frédéric Hamidi我没有完全理解你的意思。你能多解释一点,或者建议一个有用的参考吗?谢谢好的,
操作符,我想标准并没有要求
操作符void*()
每次都必须返回相同的非空指针,所以这可能会失败。希望其他人能对此有所了解。看起来像是来自代码混淆比赛之类的。它基本上归结为
cin==cout
,这是。。。奇怪的除非这是为了检查两条流的状态是好是坏。@Frédéric Hamidi我没有完全理解你的意思。你能多解释一点,或者建议一个有用的参考吗?谢谢好的,
操作符,我想标准并没有要求
操作符void*()
每次都必须返回相同的非空指针,所以这可能会失败。希望其他人能对此有所了解。看起来像是来自代码混淆比赛之类的。@lisyarus不,我的意思是
&&
。如果两者都没有失败,
=
将返回
true
,但原始表达式将返回false,因为它们是两个不同的非空指针。但它确实编译并生成所需的结果。我在研究()的解决方案时遇到了它。确切的解决方案是它编译的()@GauravJain上的第一个解决方案。。。关于C++03。它不是在C++11上编译的。@Barry on()他们是用C++11(写在lang.column下)编译的。我所说的解决方案是由()@GauravJain编写的,因为他们使用的编译器有一个bug,所以应该禁止使用该代码。@lisyarus不,我的意思是
&&
。如果两者都没有失败,
=
将返回
true
,但原始表达式将返回false,因为它们是两个不同的非空指针。但它确实编译并生成所需的结果。我在研究()的解决方案时遇到了它。确切的解决方案是它编译的()@GauravJain上的第一个解决方案。。。关于C++03。它不是在C++11上编译的。@Barry on()他们是用C++11(写在lang.column下)编译的。我所说的解决方案是由()@GauravJain编写的。他们使用的编译器有一个bug,那么代码应该被禁止。