整数如何在C ++中初始化?

时间:2018-08-05 06:05:19

标签: c++

#include <iostream>
#include <math.h>
using namespace std;

class ip{
private:
    string ip;
    int result[8];
    int sum;
public: 
   void input(){
    /* cout<<"Enter First 8 Binary in Ip address: ";
     cin>>ip;
     for(int i=0,j=7;i<8 ,j>=0;++i,--j){
        if(ip[i]=='1'){
            result[i]=pow(2,j);
        }else if(ip[i]=='0'){
            result[i]=0;
        }
    }
     for(int i=1 ; i<8 ; ++i){
     sum=sum+result[i];
   } */
   cout<<sum<<"\n";

 }
};

int main() {
ip convert;
convert.input();

return 0;
}

在运行此代码时遇到一些问题,然后我了解到问题在于整数初始化...

请帮助我,因为我得到了多余的输出

运行此代码后,我的输出是:131 我希望输出为'0' 为什么会这样

2 个答案:

答案 0 :(得分:1)

您是对的,一个问题是您没有将sum初始化为零。同样,int i = 1应该是int i = 0

sum=0;
for(int i=0 ; i<8 ; ++i){
    sum=sum+result[i];

代码还有很多其他问题,包括不必要使用类,不必要使用类变量,不必要使用浮点函数,不必要使用临时数组等。此程序可能会更简单。

答案 1 :(得分:1)

在C ++中,自动存储持续时间整数变量未初始化为任何特定值,并且将包含那些内存位置中已经发生的任何垃圾位模式。从语言标准的角度来看,变量的值是不确定的,使用它会导致不确定的行为。如果您将其定义为静态变量,则它将在C ++中自动初始化为0。

如果您尝试使用未初始化的变量,很可能编译器也会发出警告。

在GCC中,如果使用以下标志进行编译,则会看到警告:
-Wuninitialized
如果未使用自动变量而未对其进行初始化,或者如果setjmp调用可能破坏了该变量,则发出警告。在C ++中,警告是否在没有构造函数的类中出现非静态引用或非静态const成员。

根据Peter的评论进行更新:
在上述情况下,代码创建该类类型的自动存储期限对象。但是,由于您只是将ip类型的对象声明为ip convert,并且没有自己的构造函数来初始化类对象的成员值,因此将调用编译器的默认构造函数。大多数编译器(如果不是全部)都不会为您初始化成员值,因此您会看到与创建对象的内存位置中存在的位模式相对应的输出。