c – 流输出和隐式void *转换操作符函数调用

前端之家收集整理的这篇文章主要介绍了c – 流输出和隐式void *转换操作符函数调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
像这样的代码
cin>> grade;

grade是标准数据类型返回对cin(istream对象)的引用,它启用级联输入….
但我读到了如果

cin >>grade;

在while语句中用作条件…流的void * cast运算符函数被隐式调用…并且它将对istream对象的引用转换为非null或空指针,具体取决于上一次输入操作的成功或失败…并将空指针转换为false,将非null转换为true …我的问题是:

>什么是void * cast操作符函数以及它在这里是如何工作的
>如何将非空指针转换为true并将null转换为false

解决方法

1.what is the void * cast operator function and how does it work here

它看起来像这样:

operator void* () const {
    return fail() ? 0 : this;
}

问题是:为什么不是这里使用的运算符bool?答案是:因为这允许无效的转换,这可能隐藏错误.以上是safe bool idiom的一个例子.

但是,这种实现实际上已经过时了.这个成语存在更好的实现;文章解释了他们.

2.how is non-null pointer converted to true and null to false

这就是C的工作原理:任何非空指针都被视为在条件中等效为true.现在,为什么C首先在这里调用操作符void *?

实质上,当C看到一个意外类型的对象时,它会尝试应用一个隐式转换,使该对象类型在此上下文中有效.因此,编译器会尝试所有可用的隐式转换,并查看在此上下文中结果类型是否可接受.

这发生在她身上:编译器看到while(cin>> grade).它知道basic_istream在while条件的上下文中无效.因此它发现有一个运算符void *,并且void *在此上下文中有效,因此C应用此转换.

猜你在找的C&C++相关文章