【问题标题】:Why I can use class Variable without initialize it c++为什么我可以使用类变量而不初始化它c++
【发布时间】:2016-05-16 01:02:06
【问题描述】:

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

为什么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);
}

【问题讨论】:

  • 速度只是一个垃圾值,所以它可能会起作用,但请先初始化变量。它可以防止错误。
  • 问题是为什么?如果我愿意: int i;我++;我会得到一个错误
  • 如果我愿意: int i;我++;我会得到一个错误这应该是一个警告而不是一个错误,除非你启用了将警告视为错误。
  • 如果你能做到void main() 那么你可以使用未初始化的变量。顺便说一句,main 函数返回int。总是。
  • 我刚刚在 Visual Studio 2013 中添加了int i; i++;,得到了warning C4700: uninitialized local variable 'i' used,这是一个警告而不是错误。我没有启用将警告视为错误。

标签: c++ initialization


【解决方案1】:

在 C++ 中你总是可以使用未初始化的变量,最多你会得到一个警告。除非你设置了“警告为错误”选项,在这种情况下你会得到一个错误,很明显。

不同的编译器做不同的事情,所以在你的情况下,根据编译器和编译器选项,你可能会收到警告,或者不会。 见this question。

【讨论】:

  • 在int i的情况下;我++;我得到错误,但是速度变量它确实有效,怎么可能?@Ilya
  • 您是否尝试生成其他警告,例如“未使用的变量”?如果在 main() 中添加一个未使用的 var 会发生什么?
  • @AlexZemtzov 您介意改进您的问题并在其中展示您神秘的int i; i++; 案例吗?发帖minimal reproducible examples
  • @AlexZemtzov 编译器为什么会接受 void 的 main() 返回?这很奇怪。
  • 也许#pragma 被用来将C4700 变成一个错误。 #pragma warning( error : 4700 )
【解决方案2】:

注意其实是通过创建对象指针 然后对其执行赋值运算符 你实际上用垃圾值初始化它

试试这个:

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

【讨论】:

    【解决方案3】:

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

    Vehicle() : 速度{0} {}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 2013-09-11
      • 2022-12-21
      相关资源
      最近更新 更多