C++ decltype 解释

标签 c++ decltype

我在 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/

相关文章:

c++ - 将 "No known conversion"作为参数传递时来自 const 的 "this"

c++ - 为什么 `std::remove_const` 在与 `const` 一起使用时不删除引用对象的 `decltype` -ness?

c++ - 使用类成员函数对象推导成员函数返回类型

c++ - 将显式双数组定义编译为 DLL 中的二进制资源 - 有更好的方法吗?

C++ 重载取消引用运算符

c++ - 在 C++ 中,i>-1 或 i>=0 哪个更好

c++ - 我正在尝试在函数中使用新内存新堆内存,但它给出了一个错误

c++11 decltype 返回引用类型

c++ - 对这个 decltype 语句实际发生的事情感到困惑

c++ - 在 C++98 中实现 decltype