This question already has answers here:
Uninitialized values being initialized?
(7个答案)
5年前关闭。
我正在做一些测试...
首先,我发布我的源代码
.h文件
.cpp文件
主要功能
考虑使用默认ctor构造的Complex对象d
因为执行d.print()时会使用0初始化数据成员r,
r预期为0
我不是,所以我希望它是垃圾值
但是当我测试时,发生了一件奇怪的事情。
如果我在主文件中消除了此以及以下代码行:
std :: cout <
然后d.print()在我的系统上给出的i值为32767,我认为这是一个垃圾值;
但是添加该行后,d.print()只会在我的系统上将i的值设为0。
我不明白我没有设置,修改或初始化i的值,为什么要设为0?
还是,这也是垃圾值?
或者,调用这些函数之一会破坏i的值?
这东西在幕后怎么跑?
谢谢。
(7个答案)
5年前关闭。
我正在做一些测试...
首先,我发布我的源代码
.h文件
class Complex{
private:
int r = 0;//initializer
int i ;
public:
Complex(int , int I = 0);
Complex();
void print();
void set(int, int I = 1);
static void print_count();
static int count;
};
.cpp文件
#include <iostream>
#include "complex.h"
int Complex::count = 1;
Complex::Complex(int R , int I){
r = R;
i = I;
count++;
std::cout << "constructing Complex object...count is " << Complex::count << std::endl;
}
Complex::Complex(){//default constructor
std::cout << "default constructor is called..." << std::endl;
}
void Complex::print(){
std::cout << "r = " << r << ';' << "i = " << i << std::endl;
return;
}
void Complex::set(int R, int I /*= 2*/){//will be "redefaulting", an error
r = R;
i = I;
return;
}
void Complex::print_count(){//static
Complex::count = -1;//jsut for signaling...
std::cout << "count is " << count << std::endl;
return;
}
主要功能
#include <iostream>
#include "complex.h"
int main(){
Complex d;//using default constructor
d.print();
/*Complex c(4, 5);*/
Complex c(4);
//c.print();
/*c.set(2, 3)*/
c.print();
c.set(2 );
c.print();
std::cout << "count is " << c.count << std::endl;//c can access member data
c.print_count();
c.count++;//
return 0;
}
考虑使用默认ctor构造的Complex对象d
因为执行d.print()时会使用0初始化数据成员r,
r预期为0
我不是,所以我希望它是垃圾值
但是当我测试时,发生了一件奇怪的事情。
如果我在主文件中消除了此以及以下代码行:
std :: cout <
然后d.print()在我的系统上给出的i值为32767,我认为这是一个垃圾值;
但是添加该行后,d.print()只会在我的系统上将i的值设为0。
我不明白我没有设置,修改或初始化i的值,为什么要设为0?
还是,这也是垃圾值?
或者,调用这些函数之一会破坏i的值?
这东西在幕后怎么跑?
谢谢。
最佳答案
0与任何其他垃圾值一样。不要犯其他想法的错误。
从形式上看,读取未初始化的变量是未定义的行为,因此对此毫无疑问:只需正确初始化变量即可对其进行修复。
关于c++ - 为什么要初始化此数据成员? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17356290/
10-09 19:39