gpt4 book ai didi

c++ - 流输出和隐式 void* 转换运算符函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:04 29 4
gpt4 key购买 nike

像这样的代码

cin>> grade;

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

cin >>grade;

用作 while 语句中的条件...流的 void* 强制转换运算符函数被隐式调用...并将对 istream 对象的引用转换为非空或空指针,具体取决于成功或失败最后一次输入操作...空指针转换为假,非空指针转换为真...我的问题是:

  1. 什么是 void * cast 运算符函数,它在这里是如何工作的
  2. 非空指针如何转为真,空指针如何转为假

最佳答案

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

看起来像这样:

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

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

但是,这个实现实际上已经过时了。这个习语有更好的实现;这篇文章解释了它们。

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

这就是 C++ 的工作原理:任何非空指针都被认为等同于条件语句中的 true。现在,为什么 C++ 首先在这里调用 operator void*

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

她正在发生这种情况:编译器看到 while (cin >> grade)。它知道 basic_istreamwhile 条件上下文中无效。所以它发现有一个 operator void*,并且 void* 在此上下文中有效,因此 C++ 应用此转换。

关于c++ - 流输出和隐式 void* 转换运算符函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277678/

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