gpt4 book ai didi

c++ - 为什么分配函数通过引用而不是值来获取 std::nothrow_t?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:51 24 4
gpt4 key购买 nike

目前,标准库中的分配函数通过 const 引用获取 std::nothrow_t,例如:

void* operator new  ( std::size_t count, const std::nothrow_t& tag);
void* operator new[]( std::size_t count, const std::nothrow_t& tag);

因为 std::nothrow_t 只是一个用于调度目的的标记类型,按值获取它不是更简单并且(可能)更有效吗?例如:

void* operator new  ( std::size_t count, std::nothrow_t tag);
void* operator new[]( std::size_t count, std::nothrow_t tag);

const 引用设计背后的基本原理是什么?

最佳答案

如果此版本的 new 的典型用法是将其称为 new(nothrow_t()) T,那么您的观点就很好。但这不是典型的用法,典型的用法是 new(nothrow) T,其中 nothrow 声明为 extern const std::nothrow_t nothrow;。即使 nothrow_t 类型中没有实际数据,它仍然(至少)占用一个字节,并且在许多 ABI 中,这意味着(同样,至少)一个字节需要从 nothrow 对象中读取,以便将其传递给 operator new。通过引用只需要加载对象的地址。所以不,如果性能差异完全可以衡量,我不希望按值版本在这里更快。

关于c++ - 为什么分配函数通过引用而不是值来获取 std::nothrow_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964894/

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