c++ - 编译器如何隐式地进行这种转换?

标签 c++ implicit-conversion

我正在观看来自//build 的视频,其中 Herb Sutter 通过代码片段展示了显式转换关键字的好处:

template< /* ... */ > class unique_ptr {
public:
    // ...
    explicit operator bool() const { return get() != nullptr; }

他说用那个关键字,我们可以阻止它编译:

use(ptr * 42); // oops, meant *(ptr) * 42

实在是看不懂,showcase是怎么编译的?编译器如何进行转换?什么类型的?

最佳答案

它隐式地将 unique_ptr 转换为 bool,然后从 bool 转换为 int 以进行乘法运算。

(bool 转 int 表示 true 为 1,false 为 0)

关于c++ - 编译器如何隐式地进行这种转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458187/

相关文章:

c++ - 无法从使用 C API 的程序访问使用 sqlite3 创建的表

postgresql - 如何在 PostgreSQL 中创建 oid 类型的强制转换?

c++ - C++ 中关于编译器的执行顺序如何变化

android - 显示图像的透明按钮

c++ - 从 HWND 获取并保存位图(每像素 8、4、1 位 - 黑色图像)

java - 复合分配的自动(取消)装箱失败

c# - 为什么从 <T> 到 <U> 的隐式转换运算符接受 <T?>?

c++ - 如何在 makefile 中扩展模式规则?

c++ - 基于整数类型的两个类之间的隐式转换

c++ - 复制初始化和直接初始化的混淆