这个cout将如何工作
How this cout will work?
我正在检查一个代码,却被这一行弄糊涂了。
if( cout > 0 )
{
//some statements
}
请告诉我我们是否可以这样使用cout
。它将如何运作?
cout
是类型为ostream
(或其派生的某种类型)的变量。ostream
可以转换为void *
(C++11之前)或bool
(C++11)-这两个转换函数都会检查文件流中的"错误状态",如果有错误,则分别返回NULL
或false
)。由于零分别与NULL
和false
相同,因此这两个值都将与零进行比较,因此语句变为(void *)cout > NULL
或(bool) cout > false
,如果cout
不是NULL
或false
(这意味着"没有错误"),则这将是真的。
[注意:使用p > NULL
时,指针与NULL
的比较可能无法正常工作,因为指针可能是"负"的,在这种情况下,它不大于NULL
-我更希望将if (cout != 0)
或if (!cout)
视为更安全/更好的选择]。
std::cout
从std::basic_ios
继承一个explicit operator bool()
(C++11)或operator void*()
(C++11之前)。两者都具有与CCD_ 25进行比较的能力。然而,每个都有一个问题:
operator void*()
转换(感谢James Kanze在下面指出的)不能保证按预期工作。0也将转换为void *
,然后,由于一个为空,一个为非空,因此未指定比较(N3485§5.9/2)。
explicit operator bool()
转换将不会在此上下文中触发,从而导致无法编译。然而,我认为还没有任何主库实现在operator void*()
上使用它,尽管它们应该这样做。Clang可能会在下一个版本中完成这项工作,如果它是C++11完成的话。
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- sdl软件渲染器不工作,工作在硬件加速的一个