草庐IT

new_order

全部标签

c++ - 将 int 放入 char 数组中是否需要放置 new 合法?

由于C++别名规则,您不能随意将(一个int*)指向char数组,这似乎达成了一些共识。从另一个问题——Genericchar[]basedstorageandavoidingstrict-aliasingrelatedUB--似乎允许通过placementnew(重新)使用存储。alignas(int)charbuf[sizeof(int)];voidf(){//turnthememoryintoanint:(??)fromthePOVoftheabstractmachine!::new(buf)int;//isthisstrictlyrequired?(aside:it'sobvi

c++ - 将 int 放入 char 数组中是否需要放置 new 合法?

由于C++别名规则,您不能随意将(一个int*)指向char数组,这似乎达成了一些共识。从另一个问题——Genericchar[]basedstorageandavoidingstrict-aliasingrelatedUB--似乎允许通过placementnew(重新)使用存储。alignas(int)charbuf[sizeof(int)];voidf(){//turnthememoryintoanint:(??)fromthePOVoftheabstractmachine!::new(buf)int;//isthisstrictlyrequired?(aside:it'sobvi

c++ - 为什么 memory_order 作为 std::atomic 函数的运行时参数给出

std::atomic函数,例如store和load采用std::memory_order参数。参数可以在运行时确定,就像任何其他函数参数一样。但是,实际值可能会影响编译期间代码的优化。考虑以下几点:std::atomicai1,ai2;intvalue=whatever;voidfoo(){std::memory_ordermemOrd=getMemoryOrder();registerintv=value;//loadvaluefrommemoryai1.store(v,memOrd);//dependencyonv'svalueai2.store(1,memOrd);//node

c++ - 为什么 memory_order 作为 std::atomic 函数的运行时参数给出

std::atomic函数,例如store和load采用std::memory_order参数。参数可以在运行时确定,就像任何其他函数参数一样。但是,实际值可能会影响编译期间代码的优化。考虑以下几点:std::atomicai1,ai2;intvalue=whatever;voidfoo(){std::memory_ordermemOrd=getMemoryOrder();registerintv=value;//loadvaluefrommemoryai1.store(v,memOrd);//dependencyonv'svalueai2.store(1,memOrd);//node

c++ - 将 new 与 decltype 一起使用

T*t;//Tisanimplementationdetailt=newT;//wanttoavoidnamingTtoallowforflexibilityt=newdecltype(*t);//error:cannotuse'new'toallocateareferencet=newstd::remove_reference::type();//clunkyThis回答为什么decltype(*t)返回T&而不是T。我可以将我的最后一行放入宏中,但这似乎不是最理想的。有没有比我到目前为止更好的解决方案?这是否属于CodeReview? 最佳答案

c++ - 将 new 与 decltype 一起使用

T*t;//Tisanimplementationdetailt=newT;//wanttoavoidnamingTtoallowforflexibilityt=newdecltype(*t);//error:cannotuse'new'toallocateareferencet=newstd::remove_reference::type();//clunkyThis回答为什么decltype(*t)返回T&而不是T。我可以将我的最后一行放入宏中,但这似乎不是最理想的。有没有比我到目前为止更好的解决方案?这是否属于CodeReview? 最佳答案

c++ - “new Foo()” 和 “&Foo()” 作为参数的区别

我有一些关于关键字new和&在特定上下文中的区别的问题。假设这是我的代码:structBase{};structFoo:Base{};structStorage{voidsave(Base*object){}Base*content;};intmain(){Storages1,s2;s1.save(newFoo());s2.save(&Foo());}main执行后,s1将持有一个指向Foo类型对象的指针。然而s2将持有一个指向Base类型对象的指针。s2.content只会指向Foo类型的对象,直到save方法完成执行。如有错误请指正:据我了解,newFoo()创建了一个指向Foo类

c++ - “new Foo()” 和 “&Foo()” 作为参数的区别

我有一些关于关键字new和&在特定上下文中的区别的问题。假设这是我的代码:structBase{};structFoo:Base{};structStorage{voidsave(Base*object){}Base*content;};intmain(){Storages1,s2;s1.save(newFoo());s2.save(&Foo());}main执行后,s1将持有一个指向Foo类型对象的指针。然而s2将持有一个指向Base类型对象的指针。s2.content只会指向Foo类型的对象,直到save方法完成执行。如有错误请指正:据我了解,newFoo()创建了一个指向Foo类

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo