带有空大括号的 C++ 新初始化触发 cppcheck uninitvar 错误
Posted
技术标签:
【中文标题】带有空大括号的 C++ 新初始化触发 cppcheck uninitvar 错误【英文标题】:C++ new with empty curly braces init triggers cppcheck uninitvar error 【发布时间】:2021-06-25 14:30:17 【问题描述】:请帮助我理解为什么 cppcheck 指责 test.cpp:6:11: error: Uninitialized variable: inst1 [uninitvar]
引用 Test* inst1 = new Test;
行的特定代码行
cppcheck --version = Cppcheck 1.90
#include <tuple>
class Test;
auto foo()
Test* inst1 = new Test;
Test* inst2 = new Test;
Test* inst3 = new Test();
return std::make_tuple(inst1, inst2, inst3);
int main
根据https://en.cppreference.com/w/cpp/language/value_initialization()
和在这种情况下应该是一样的。
我编辑了描述,因为人们声称提供的 sn-p 是不真实的,对此感到抱歉。这是变量名的拼写错误。
【问题讨论】:
那是你的真实代码吗?我想 cppcheck 也会抱怨int main
@DrewDormann 奇怪的是,它没有。将其清理到int main()
仍然表现出相同的行为。
假设这是您的真实代码,您在 cppcheck 中发现了一个错误。他们可能会喜欢错误报告。
代码中没有instance
。代码不是真实的。
cppcheck 不会责怪 main,即使你没有提供返回声明。它不应该。 main 中的 return 语句是可选的。
【参考方案1】:
这看起来确实像误报。我为此提交了一张票 - 请参阅https://trac.cppcheck.net/ticket/10698。
【讨论】:
以上是关于带有空大括号的 C++ 新初始化触发 cppcheck uninitvar 错误的主要内容,如果未能解决你的问题,请参考以下文章