gpt4 book ai didi

c++ - 重载运算符 delete 可以有默认参数吗?

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

我正在尝试重载运算符 newdelete,并注意到 MSVC 和 GCC 在 operator delete 的实现上似乎有所不同。考虑以下代码:

#include <cstddef>

struct CL {
// The bool does nothing, other than making these placement overloads.
void* operator new(size_t s, bool b = true);
void operator delete(void* o, bool b = true);
};
// Functions are simple wrappers for the normal operators.
void* CL::operator new(size_t s, bool b) { return ::operator new(s); }
void CL::operator delete(void* o, bool b) { return ::operator delete(o); }

auto aut = new (false) CL;

此代码将使用 GCC 正确编译(使用 Ideone 和 TutorialsPoint 在线编译器测试),但不能使用 MSVC(使用 MSVS 2010、MSVS 2015 在线和 Rextester 测试)。

虽然 GCC 似乎按预期编译它,但 MSVC 发出错误 C2831 ;我检查了 Cppreference,但找不到答案; default parameter页面没有提到运算符,operator overloading & operator delete页面没有提到默认参数。同样,Overloading new and delete SO 的 C++ FAQ 中的条目没有提到默认参数。

那么,鉴于此,这些行为中的哪些(允许默认参数,或将它们视为错误)符合 C++ 标准?

链接:

最佳答案

An operator function cannot have default arguments (8.3.6), except where explicitly stated below.

(C++14标准,[over.oper]/8;C++03标准中出现了相同的句子。

允许默认参数的特定情况是函数调用运算符的情况(operator();参见 [over.call]/1)。在所有其他情况下,它们都是不允许的。

关于c++ - 重载运算符 delete 可以有默认参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402250/

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