gpt4 book ai didi

C++Builder: header 中的警告

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:34 26 4
gpt4 key购买 nike

我使用 Embacadero C++Builder。我有以下问题:

我曾经遵循指南并尽力在编译期间不出现警告(通过修复代码,而不是通过禁用警告)。

我也用 std::unique_ptr<> .

但事实证明 std::unique_ptr 的实现有一个错误(至少它在 Release模式下在 32 位平台上触发警告,当我查看实现时,它似乎不是百分百正确的)。

细节(示例代码)。我尝试在发布配置中使用 32 位编译器构建以下代码

#include <memory>
using namespace std;

int main()
{
unique_ptr<int> myUniqueInt;
int * myInt = new int(5);
myUniqueInt = unique_ptr<int>(move(myInt));
return 0;
}

然后我收到警告:[bcc32 Warning] memory(806): W8070 Function should return a value

现在,如果我查看警告的来源,我会看到以下内容(文件“内存”,第 798 行,来自标准库):

_Myt& operator=(_Myt&& _Right)
{ // assign by moving _Right
if (this != &_Right)
{ // different, do the move
reset(_Right.release());
this->get_deleter() = _STD move(_Right.get_deleter());
return (*this);
}
}

我们可以看到,确实如果this == &_Right ,则函数不返回任何值,所以警告是正确的。

我的问题如下:

  1. 为什么在调试配置中没有触发警告 - 它只在发布时触发?
  2. 如何在不放弃全局“将警告视为错误”并且不全局禁用此警告的情况下克服这个问题。

注意事项:

  • 警告仅出现在发布配置中。
  • XE6 和 XE8 版本的 C++Builder 上存在警告
  • 64 位编译器不存在警告(这是预期的,因为编译器不同)。

提前致谢。

最佳答案

How can I overcome this without giving up "treat warnings as errors" globally and without disabling this warning globally.

您必须编辑 <memory>自己来纠正错误。然后您应该向 STL 供应商提交错误报告 (Dinkumware Ltd)。

关于C++Builder:<memory> header 中的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com