警告:变量未初始化
Warning: variable is uninitialized
我有以下一段代码:
class circularList
{
public:
circularList() : data(0), next(this) {}
public:
int data;
circularList* next;
};
int main()
{
circularList* root = new circularList;
}
我不断收到一条警告,说变量circularList* next
未初始化,但我可以看到我是否运行使用指针root
地址初始化的代码。
指针在示例中已明确初始化。这似乎是一个编译器错误,因为应该没有警告。您应该将其报告给维护者。
这是静态分析器的错误或错误功能。它的预期行为是对代码做出如下反应:
class circularList
{
public:
circularList() : data2(0), data1(this->data2) {}
public:
int data1;
int data2;
};
data2
实际上是在data1
(产生另一个警告(和以this
开头的表达式之后初始化的,this->XXX
提示检查。在您的情况下,->XXX
不存在,它会混淆分析器。这应该是一种回归,因为一些旧编译器的版本(与VS2005或VS2008一样古老(,或者一些非常古老的gcc
或lcc
(不是稳定的版本(表达了类似的担忧。
仍然存在不应使用this
的情况 - 如果存在虚拟继承,或者初始化尝试调用虚函数。
next(this)
应该是糟糕的选择,因为this
在像这样传递时逻辑上不会创建。也许在构造函数块中使用next = this
。
PS:gcc (GCC) 4.8.5
没有发出任何警告。
class circularList
{
public:
circularList() : data(0) { next = this; }
public:
int data;
circularList* next;
};
int main()
{
circularList* root = new circularList;
std::cout << root->data << "n";
std::cout << root->next->data << "n";
root->data = 1;
std::cout << root->data << "n";
std::cout << root->next->data << "n";
}
相关文章:
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 在 C++ 中访问 lambda 捕获初始化变量
- 为什么C++不支持对未初始化变量进行智能分析?
- 使用 clang++ 和 g++ 在C++中初始化变量
- C++使用 lambda 初始化变量
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++ - 输出与初始化变量不同?
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- C++ 中的初始化变量
- C++中未初始化变量的值
- 如何在需要提及需要循环声明的其他类的类中初始化变量?
- 我想知道在构造函数中初始化变量时的生命周期
- 读取恰好具有良好值的未初始化变量
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 为什么在 c++ 中有多种初始化变量的方法
- 没有参数的默认构造函数是否总是初始化变量?
- 是否可以使用 lambda 初始化变量(删除复制 ctor 时)
- 使用构造函数跳闸UB的新放置后使用初始化变量