我是一个新的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;
}
Run Code Online (Sandbox Code Playgroud)
与Java和C#不同,C和C++不会出于性能原因自动对内存或对象成员进行零初始化,因为如果您只是设置自己的值,则无法覆盖内存两次; 缺点是你必须非常小心,以确保你不首先使用未初始化的数据.
要解决您的问题,您可以在构造函数中或在初始化列表中设置成员:
Trie() {
this->color = 0;
this->root = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
要么:
Trie() :
color ( 0 ),
root ( nullptr )
{
}
Run Code Online (Sandbox Code Playgroud)
至于你的color值,考虑使用元组代替,因为没有保证int是32位整数(假设你需要存储0-255个RGB值):
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 ) {
}
}
Run Code Online (Sandbox Code Playgroud)