为什么 new 和 delete 运算符签名与所有其他运算符不同
Why new and delete operators signatures are different from all other operators
新运算符的签名是:
void* operator new(size_t count)
“算”字和“新”字之间有一个白字space。这是:
不同于所有其他运算符签名(除了 new、delete 及其对应的数组)。例如:
T& operator=(const T& other)
不符合 C++ 不允许白色 spaces 的函数名规则。
我假设“operator”在这种情况下是一个关键字...但如果这是正确的,为什么在所有其他运算符函数签名中不是这种情况?
有不一致的解释吗?
void* operatornew(size_t count)
是一个名为 operatornew
的函数,它接受一个 size_t
和 returns 一个 void*
.
operator=
和大多数其他运算符不需要 space 的原因是这些符号在名称中无效,因此 operator=
不需要 space.
C++ 语法实际上是根据标记编写的,在所有类型的运算符定义之间是一致的。 operator
s 是特殊用途的,并且在 operator
关键字之后可以跟随哪些标记方面是固定的,但是出现的白色 space 在标准中的任何地方都没有强制要求。
就C++语法而言,以下签名没有区别:
auto operator+=(const Foo&) -> Foo&
auto operator +=(const Foo&) -> Foo&
auto operator += (const Foo&) -> Foo&
auto
operator
+=
(const Foo&) -> Foo&
operator new
在这里不再或更少地保持一致。这里唯一的偏差是一些运算符 allow no space 在 operator
标记之后,例如 operator=
—— 这样做的原因是C++ 语法中标记的分解方式。
大多数标记是字母数字序列,在特殊字符处中断,例如白色space 或+
、=
等。在这种情况下,operator=
中断为两个标记 -- operator
和 =
,它们构成运算符。
这也意味着一些运算符也是多个标记的复合,例如 operator new[]
-- 也可以写成 operator new []
,因为它由 3 个标记组成:operator
、new
和 []
,如 [over.oper.general]/1 的脚注所示:
[Note 1: The operators new[], delete[], (), and [] are formed from more than one token.
The latter two operators are function call and subscripting.
— end note]
新运算符的签名是:
void* operator new(size_t count)
“算”字和“新”字之间有一个白字space。这是:
不同于所有其他运算符签名(除了 new、delete 及其对应的数组)。例如:
T& operator=(const T& other)
不符合 C++ 不允许白色 spaces 的函数名规则。
我假设“operator”在这种情况下是一个关键字...但如果这是正确的,为什么在所有其他运算符函数签名中不是这种情况?
有不一致的解释吗?
void* operatornew(size_t count)
是一个名为 operatornew
的函数,它接受一个 size_t
和 returns 一个 void*
.
operator=
和大多数其他运算符不需要 space 的原因是这些符号在名称中无效,因此 operator=
不需要 space.
C++ 语法实际上是根据标记编写的,在所有类型的运算符定义之间是一致的。 operator
s 是特殊用途的,并且在 operator
关键字之后可以跟随哪些标记方面是固定的,但是出现的白色 space 在标准中的任何地方都没有强制要求。
就C++语法而言,以下签名没有区别:
auto operator+=(const Foo&) -> Foo&
auto operator +=(const Foo&) -> Foo&
auto operator += (const Foo&) -> Foo&
auto
operator
+=
(const Foo&) -> Foo&
operator new
在这里不再或更少地保持一致。这里唯一的偏差是一些运算符 allow no space 在 operator
标记之后,例如 operator=
—— 这样做的原因是C++ 语法中标记的分解方式。
大多数标记是字母数字序列,在特殊字符处中断,例如白色space 或+
、=
等。在这种情况下,operator=
中断为两个标记 -- operator
和 =
,它们构成运算符。
这也意味着一些运算符也是多个标记的复合,例如 operator new[]
-- 也可以写成 operator new []
,因为它由 3 个标记组成:operator
、new
和 []
,如 [over.oper.general]/1 的脚注所示:
[Note 1: The operators new[], delete[], (), and [] are formed from more than one token. The latter two operators are function call and subscripting. — end note]