为什么新的位置依赖于#include <iostream>
听起来很荒谬?好的,只有在对包含进行注释时,此代码才会编译:
// #include <iostream>
struct Alignas { void* ptr; };
alignas(Alignas) static char storage[sizeof(Alignas)];
int main() { new(storage) Alignas; }Gcc错误(与Clang相同):
alignas.cpp:7:27: error: no matching function for call to ‘operator new(sizetype, char [8])’
7 | int main() { new(storage) Alignas; }
| ^~~~~~~
<built-in>: note: candidate: ‘void* operator new(long unsigned int)’
<built-in>: note: candidate expects 1 argument, 2 provided
<built-in>: note: candidate: ‘void* operator new(long unsigned int, std::align_val_t)’
<built-in>: note: no known conversion for argument 2 from ‘char [8]’ to ‘std::align_val_t’看来所有的候选人都不是新来的。好像我的位置-新的表达式被认不出来。除非我包括了标题,这是完全荒谬的,因为它是一个语言特性。
编辑:
这对我来说是荒谬的,因为我当然读过关于cppreference.com的文档(它涵盖了新的位置),并且列出的头标记没有。
发布于 2020-06-26 12:57:59
为什么安置新的依赖于
#include <iostream>?
没有。新的安置取决于<new>。这取决于它,因为语言说它取决于它。它与操作符新重载有关,这些重载是由placement调用并在<new>中声明的。
<iostream>只是碰巧为你包括了<new>。当然,你不应该依赖它。
https://stackoverflow.com/questions/62594672
复制相似问题