首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >布局新依赖于iostream

布局新依赖于iostream
EN

Stack Overflow用户
提问于 2020-06-26 12:22:45
回答 1查看 157关注 0票数 1

为什么新的位置依赖于#include <iostream>

听起来很荒谬?好的,只有在对包含进行注释时,此代码才会编译:

代码语言:javascript
复制
// #include <iostream>

struct Alignas { void* ptr; };

alignas(Alignas) static char storage[sizeof(Alignas)];

int main() { new(storage) Alignas; }

Gcc错误(与Clang相同):

代码语言:javascript
复制
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的文档(它涵盖了新的位置),并且列出的头标记没有。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-26 12:57:59

为什么安置新的依赖于#include <iostream>

没有。新的安置取决于<new>。这取决于它,因为语言说它取决于它。它与操作符新重载有关,这些重载是由placement调用并在<new>中声明的。

<iostream>只是碰巧为你包括了<new>。当然,你不应该依赖它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62594672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档