我是c ++和指针的新手,我对这个c ++代码有疑问。通常这段代码必须显示" true"但它并没有。提前谢谢。
class Trie{
public:
Trie* root;
int color;
Trie(){
color=0;
}
~Trie(){
}
};
int main(){
Trie test;
if(test.root==nullptr)cout<<"true"<<endl;
}
答案 0 :(得分:9)
C和C ++,与Java和C#不同,出于性能原因不会自动对内存或对象成员进行零初始化,因为如果您只是设置自己的值,则无法覆盖内存两次;缺点是你必须非常小心,以确保你不首先使用未初始化的数据。
要解决您的问题,您可以在构造函数中或在初始化列表中设置成员:
Trie() {
this->color = 0;
this->root = nullptr;
}
或者:
Trie() :
color ( 0 ),
root ( nullptr )
{
}
对于color
值,请考虑使用元组,因为不能保证int
将是32位整数(假设您需要存储0-255个RGB值):< / p>
struct RgbColor {
uint8_t r;
uint8_t g;
uint8_t b;
RgbColor() :
RgbColor( 0, 0, 0 ) {
}
RgbColor(uint8_t r, uint8_t g, uint8_t b) :
r(r),
g(g),
b(b) {
}
RgbColor(uint32_t rgb) :
r( ( rgb >> 24 ) & 0xFF ),
g( ( rgb >> 16 ) & 0xFF ),
b( ( rgb >> 8 ) & 0xFF ) {
}
}