【发布时间】:2018-08-03 07:02:21
【问题描述】:
这里的 operator new 的 static 是什么意思?如果我把它放在头文件中会发生什么?
static void* operator new(size_t size, std::string s)
{
return 0;
}
int main()
{
return 0;
}
此代码在 Visual Studio 2013 上编译
但是 gcc 报错
错误:'void* operator new(size_t)' 可能未声明 作为静态的
static void* operator new(size_t size)
叮当声也是这样
错误:'operator new' 的静态声明遵循非静态 声明
static void* operator new(size_t size)
这是 C++ 中的灰色地带,还是 Visual Studio 大方?
【问题讨论】:
-
VS 很慷慨。
-
static对于类级别的自定义分配函数是强制性的,但如果它是全局分配函数,则没有任何意义。 -
VS 并不慷慨:“错误 C2323:'operator new':非成员 operator new 或 delete 函数不得声明为静态或在全局命名空间以外的命名空间中”。你的 VS 版本太旧了。将运算符替换为一个源代码文件而不是另一个源代码文件通常效果不佳。所以你最好把它修好。
-
@Hans Passant 请务必提及 vs 的版本
-
从 VS2017 版本 15.5.6 得到的
标签: c++