我在 StackOverflow 上找到了以下声明来替换 new
/delete
运算符。但我想了解这个符号
How to properly replace global new & delete operators
void * operator new(decltype(sizeof(0)) n) noexcept(false)
现在让我们分开:New 显然需要返回一个指针。并且 new
用作运算符。到目前为止,一切都很好。我也很清楚 n
必须代表要分配的字节数。
不清楚的部分是论点:
sizeof(0)
(在 32 位机器上)计算为 sizeof(int) = 4
然后我得到了decltype(4 n)
???
这是什么意思?
最佳答案
decltype(sizeof(0)) n
并不意味着 decltype(4 n)
.在
void * operator new(decltype(sizeof(0)) n) noexcept(false)
decltype(sizeof(0)) n
部分表示参数名为 n
它的类型是什么 sizeof(0)
返回。您可以将其替换为
void * operator new(std::size_t n) noexcept(false)
自 sizeof
保证返回 std::size_t
每[expr.sizeof]/6但以第一种方式进行意味着您不需要包含 <cstddef>
关于C++ decltype 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51975660/