Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';是否允许重新定义全局运算符新(大小)?_C++ - Fatal编程技术网

C++ 为什么';是否允许重新定义全局运算符新(大小)?

C++ 为什么';是否允许重新定义全局运算符新(大小)?,c++,C++,为什么允许重新定义全局运算符new(size\u t) P.>在C++标准库(从C++入门第五中学习)中,存在一个相同的、默认的 >代码>运算符new(siZeZt) 默认运算符new位于全局命名空间中,那么为什么用户定义的全局运算符new与默认运算符new不冲突呢?因为它们在同一范围内,没有重新定义错误吗?标准(语言支持库->动态内存管理)表示这些功能: 可替换:C++程序可以用这些函数定义函数 函数签名,从而替换定义的默认版本 通过C++标准库.< /P> 将使用程序的定义而不是默认版

为什么允许重新定义全局
运算符new(size\u t)

<> P.>在C++标准库(从C++入门第五中学习)

中,存在一个相同的、默认的<强> >代码>运算符new(siZeZt)<强> 默认运算符new位于全局命名空间中,那么为什么用户定义的全局运算符new与默认运算符new不冲突呢?因为它们在同一范围内,没有重新定义错误吗?

标准(语言支持库->动态内存管理)表示这些功能:

可替换:C++程序可以用这些函数定义函数 函数签名,从而替换定义的默认版本 通过C++标准库.< /P>

将使用程序的定义而不是默认版本 由实现([support.dynamic])提供。这种替代 在程序启动之前发生([basic.def.odr],[basic.start])。这个 程序声明不得指定为内联

无需诊断

替代功能

非保留函数 定义由C++程序提供。 注:只有一个定义 因为该功能在程序运行期间有效 执行,作为创建程序([lex.phases])的结果,以及 解析所有翻译单位([basic.link])的定义。 — 尾注 ]


为什么BuffQuoQuy?“范围”?不,你只引用引用的东西。如果要在段落之间分开,你只需要两个新的文件。简短的回答是:“因为C++标准明确允许用户定义的全局运算符新来替换默认的全局运算符”。@ USER 2027,谢谢您的提醒,我已经修改了。@彼得,ODR规则不适用于这种情况,仅仅因为标准允许这种行为。也很好地解释为什么ODR不适用于C++标准库中定义的函数。我认为这是OP真正困惑的。@ dodGyCODeExpRe:?非常感谢,我认为在程序启动之前进行更换是最好的选择point@choxsword这也意味着,在链接期间。对我来说,关键是:不需要诊断。。