gpt4 book ai didi

C++ 转换运算符

转载 作者:太空狗 更新时间:2023-10-29 23:36:00 27 4
gpt4 key购买 nike

在下面的代码中:

if ( cin >> x ) { /* ... */ }

标准库定义了一个运算符转换operator void*,它将类型istream转换为void*。但是,如果 if 测试条件,为什么标准库没有定义从类型 istream 到类型 bool 的转换?还是在实现背后有什么隐含的考虑?

最佳答案

原因很简单,您不想意外地转换为 int。 .例如,假设存在到 bool 的隐式转换你写了

if (std::cin << x) { /* ... */ }

编译器无法捕获明显的错误(使用 << 而不是 >> ),因为隐式转换将转换为 int并愉快地改变结果。这几乎肯定不是预期的。 void*无法移动,即编译器会产生错误。

在 C++11 之前,无法标记转换运算符 explicit .您只能将转换构造函数标记为 explicit .在 C++11 中,流的转换运算符实际上更改为 explicit。转换为 bool作为转换为 void*也有一些问题。

关于C++ 转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865499/

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