gpt4 book ai didi

c++ - 为什么 QString::toInt() 接收一个指针而不是一个引用?

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:51 26 4
gpt4 key购买 nike

QString 有 toInt()、toLong() 等几个方法

这些方法接收一个指向 bool 的指针,确定转换是否成功,如下所示:

int QString::toInt(bool * ok = 0, int base = 10) const

我的问题是:

为什么“ok”是指针而不是引用?

我知道它可以使用任何一个来实现,但我看不出使用指针比引用有任何优势。

最佳答案

在 C++ 中,引用必须引用某物。没有空引用检查,所以它不能是带有默认空值的可选参数,因为它带有指针,可以为空,并且可以检查以确定是否应该使用它。

如果他们用不同的参数重载函数,他们可能会使用引用。但这更容易、更直接。

编辑:正如 R Sahu 指出的那样,确实可以为引用参数提供默认值。但是,这可能会导致一些开销:

  • 最好的情况是,默认 bool 值每次都会被设置,无论您是否真的传递了一个。这最终可能会占用整个行缓存,白白浪费 64 字节宝贵的 L1 缓存

  • 更坏的情况是,默认的 bool 将不会被缓存,这将需要 RAM 访问,这将在数据到达寄存器之前占用大量 CPU 周期

  • 最坏的情况,内存会被分页,上帝禁止机械存储,这将比以前的情况花费更多

  • 此外,在非常常见的多线程场景中,这可能需要一些基本的同步,偶尔有人决定使用默认 bool 而不是用户提供的 bool,这将需要更多开销,即使在使用场景是线程安全的情况下也是如此

当然,由于不需要阅读,这种惩罚可能会在一定程度上被掩盖。但它仍然会存在,并且会造成损失。这可以通过使用空指针并在指针为空时简单地省略该访问来完全避免。因此,需要使用 & 运算符实际上是避免这一切的一个小代价。

关于c++ - 为什么 QString::toInt() 接收一个指针而不是一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207555/

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