为什么我可以在不初始化 c++ 的情况下使用类变量

Why I can use class Variable without initialize it c++

本文关键字:情况下 类变量 c++ 我可以 初始化 为什么      更新时间:2023-10-16

>我有下一个代码(让它变得小而简单),

为什么我让speed +=工作,尽管speed根本没有初始化?

#include <iostream>
using namespace std;
class Vehicle {
  protected:
     int speed;
     public:
         virtual void repair(int j) {
             cout << "Vehicle " << j << endl;
             if (repair())
             {
                 speed += j;
                 cout << "Speed:" << speed;
             }
        }
        int repair(){ cout << "Vehicle repair " << endl; return 1; }
};
void main() { 
    Vehicle v; //Car c; CityCar cc;
    Vehicle * vp; //Car * cp;
    vp = &v; 
    vp->repair(1);
}

在C++中,您始终可以使用未初始化的变量,最多会收到警告。除非您设置了"警告为错误"选项,在这种情况下,您显然会收到错误。

不同的编译器执行不同操作,因此在您的情况下,根据编译器和编译器选项,您可能会收到警告,也可能不会收到警告。看到这个问题。

请注意,实际上通过创建对象指针然后对其执行赋值运算符您实际上在垃圾值中初始化了它

试试这个:

Int x,*a;     
a=&x;
cout<<*a;

速度是 int 的一种类型,int 是一种内置类型。如果对象是内置类型,则值初始化会将其设置为零,默认初始化它会给它一个未定义的值。在您的情况下,速度具有未定义的值。在公共部分添加带有构造函数初始值设定项的此构造函数应该适合您:

车辆() : 速度{0} {}