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++_Clang_Libc++ - Fatal编程技术网

C++ 什么是新的内置操作员?它是如何工作的?

C++ 什么是新的内置操作员?它是如何工作的?,c++,clang,libc++,C++,Clang,Libc++,在浏览libc++代码时,我看到ndk分配器\uu allocate函数正在调用\uu内置操作符\u new,但我在libc++代码中找不到它的定义 顾名思义,这显然是内存分配功能。但谁来实施呢?它是由编译器像clang、gcc那样定义的吗?在哪里可以找到它的定义?它是一个内在的,由编译器本身隐式定义的(因此它被称为内置)。在Clang的语言扩展部分: \uuuuu内置运算符\uu新建和\uuuuu内置运算符\uu删除 \uuuuu内置操作符\uu new分配内存就像非放置非类新表达式一样。这就

在浏览libc++代码时,我看到ndk分配器
\uu allocate
函数正在调用
\uu内置操作符\u new
,但我在libc++代码中找不到它的定义


顾名思义,这显然是内存分配功能。但谁来实施呢?它是由编译器像clang、gcc那样定义的吗?在哪里可以找到它的定义?

它是一个内在的,由编译器本身隐式定义的(因此它被称为内置)。在Clang的语言扩展部分:

\uuuuu内置运算符\uu新建和\uuuuu内置运算符\uu删除

\uuuuu内置操作符\uu new
分配内存就像非放置非类新表达式一样。这就像直接调用普通的非放置<代码>::运算符new < /C>,除了它允许某些优化,C++标准不允许直接函数调用到<代码>::运算符new < /Cord>(特别是删除新的/删除对和合并分配)。 类似地,
\u内置操作符\u delete
就像非类delete表达式一样释放内存,与直接调用普通的
::操作符delete
完全相同,只是它允许优化。当前只有
\u内置\u运算符\u delete
的非大小形式可用

这些构建项旨在用于实现<代码> STD::分配器< /C>和其他类似的分配库,并且仅在C++中可用。p>


好吧,clang是开源的,所以你可以搜索它的代码,看看符号是否在那里。根据定义,内置是编译器内置的东西,因此它似乎是一个好地方。请注意,这是特定于您正在使用的特定编译器的实现细节。如果你想写便携式C++,你应该假装你对最奇怪的东西一无所知…你知道为什么标准禁止“删除新的/删除对和合并分配”吗?@nada-我得深入研究一下。但是如果你好奇的话,在我看来,这是值得发布一个关于它的新问题。谢谢。我对这件事作了一番评论。