C++ const 指针奇怪的行为
C++ const pointers weird behaviour
Class C {
struct Something {
string s;
// Junk.
}
// map from some string to something.
map<string, Something> map;
// Some more code:
const Something *Lookup(string k) const {
const something *l = SomeLookUpFunction();
cout << l;
cout << &l->s;
cout << l->s;
return l;
}
}
// Some Test file
const C::Something *cs = C::Lookup("some_key");
cout << cs;
cout << &cs->s;
cout << cs->s;
奇怪的是这个输出:
* 对于查找功能:
0x9999999
0x1277777
some_string
* 测试代码
0x9999999
0x1277777
000000000000000000000000000000000000000000 ....
在测试文件中,它给出了一串很长的零,但地址是相同的。知道可能出了什么问题吗?
由于您没有共享函数 SomeLookUpFunction
的代码,我不得不猜测您正在 返回指向类型 Something
的本地对象 的指针。这是个坏主意,请参阅 similar QA。
要开始修复您的代码,您应该从返回简单对象开始,而不是指针,如下所示:
// Some more code:
const Something lookup(string k) const {
const something l = SomeLookUpFunction(); // return simple object
cout << &l;
cout << &l.s;
cout << l.s;
return l; // same object
}
当然,您应该通过为类型 something
提供复制构造函数来改进代码,甚至改进您的 map
.
Class C {
struct Something {
string s;
// Junk.
}
// map from some string to something.
map<string, Something> map;
// Some more code:
const Something *Lookup(string k) const {
const something *l = SomeLookUpFunction();
cout << l;
cout << &l->s;
cout << l->s;
return l;
}
}
// Some Test file
const C::Something *cs = C::Lookup("some_key");
cout << cs;
cout << &cs->s;
cout << cs->s;
奇怪的是这个输出:
* 对于查找功能:
0x9999999
0x1277777
some_string
* 测试代码
0x9999999
0x1277777
000000000000000000000000000000000000000000 ....
在测试文件中,它给出了一串很长的零,但地址是相同的。知道可能出了什么问题吗?
由于您没有共享函数 SomeLookUpFunction
的代码,我不得不猜测您正在 返回指向类型 Something
的本地对象 的指针。这是个坏主意,请参阅 similar QA。
要开始修复您的代码,您应该从返回简单对象开始,而不是指针,如下所示:
// Some more code:
const Something lookup(string k) const {
const something l = SomeLookUpFunction(); // return simple object
cout << &l;
cout << &l.s;
cout << l.s;
return l; // same object
}
当然,您应该通过为类型 something
提供复制构造函数来改进代码,甚至改进您的 map
.