草庐IT

Wmaybe-uninitialized

全部标签

c++ - 在特定变量上禁用 GCC "may be used uninitialized"

我在堆栈变量上收到此警告:warning:object.membermaybeuseduninitializedinthisfunction在这种情况下,我不希望强制初始化只是为了消除警告,因为它会消耗CPU周期。该变量是一个POD结构,因此其上的memset不是零成本。我可以验证该变量从未在未初始化的情况下使用过,所以我只想取消它的警告。一般来说,我确实想要警告,只是在这个特定场景中不针对这个特定变量。如何抑制警告?看起来编译指示诊断是正确的方法,但它们需要最新版本的GCC(4.6)在该版本已知之前没有可接受的解决方案。 最佳答案

c++ - std::uninitialized_copy 和 std::copy 之间的区别?

std::uninitialized_copy和std::copy有什么区别,什么时候用哪个? 最佳答案 假设您通过malloc在堆上分配了一些内存并有一个指针T*p指向它。您最终会得到未初始化的存储,因为所有malloc所做的只是将您要求的大小的位置标记为已分配(另一方面,new实际上构造了对象,从而使分配的区域初始化存储)。由于从p开始的内存位置没有T类型的有效对象坐在那里,你不能这样做Ta;*p=a;因为在p处没有T类型的对象来调用赋值运算符。相反,您将使用placementnew在位置p处构造一个类型为T的对象。:Ta;ne

c++ - std::uninitialized_copy 和 std::copy 之间的区别?

std::uninitialized_copy和std::copy有什么区别,什么时候用哪个? 最佳答案 假设您通过malloc在堆上分配了一些内存并有一个指针T*p指向它。您最终会得到未初始化的存储,因为所有malloc所做的只是将您要求的大小的位置标记为已分配(另一方面,new实际上构造了对象,从而使分配的区域初始化存储)。由于从p开始的内存位置没有T类型的有效对象坐在那里,你不能这样做Ta;*p=a;因为在p处没有T类型的对象来调用赋值运算符。相反,您将使用placementnew在位置p处构造一个类型为T的对象。:Ta;ne