运营商new的静态意味着什么?如果我把它放在头文件中会发生什么?
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)
clang也是如此
错误:'operator new'的静态声明遵循非静态 声明
static void * operator new(size_t size)
这是c ++的灰色区域,还是视觉工作室慷慨?
答案 0 :(得分:5)
static
对全球operator new
毫无用处。 VS C ++编译器很慷慨:void *operator new
已经被声明为非静态的,不能第二次声明为静态,GCC和clang会通知你。
static
适用于类对象的重载自定义operator new
。那里需要static
,因为operator new用于分配对象,this
在分配后首先可用,换句话说operator new
首先返回this
指针。 / p>
请注意,根据标准
15.5免费商店
T类的任何分配函数都是静态成员(即使不是 显式声明静态)。