带有空大括号的 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

空大括号是调用默认构造函数还是调用 std::initializer_list 的构造函数?

节点模块 raml2html 返回空大括号

C++:调用无参数的构造函数为啥不加括号

C++ 不能用初始值设定项列表初始化非聚合错误

C++ 中聚合的带括号初始化的模板参数推导

C++中带括号的数组对象的初始化