为什么分配函数使用std::nothrow_t作为引用而不是值
Why allocation functions take std::nothrow_t by reference rather than by value?
目前,标准库中的分配函数通过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++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 无法将右值引用函数与 GCC 匹配
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"
- 通过引用函数传递指针参数是什么意思?
- 常量引用函数参数的地址何时唯一?
- 我想了解为什么在这个例子中使用引用函数?或者引用在c++函数中的重要性
- C++ 通过引用函数传递数组,但内容保持不变
- 用数组或指针引用函数?
- 引用函数如何"int &foo();"工作?
- 常量引用函数参数:是否可以禁止临时对象?
- 计算在代码中引用函数的次数
- <initializer_list> 引用函数
- 字符串引用(函数)的差异
- 在类中引用函数时的"No Matching Function for Call"
- 无法通过引用函数"calcValues"中"firstNum"和"secondNum"变量来更改值
- 尝试引用已删除的函数(不引用函数)
- 引用函数指针
- 引用函数按值和自动返回
- 为什么我们可以取消引用函数指针
- 通过引用函数传递值的目的是什么