例如,如果我有以下内容:
void foo(string* s)
{
bar(s); // this line fails to compile, invalid init. error
}
void bar(const string& cs)
{
// stuff happens here
}
我需要进行哪些转换才能让电话成功?
答案 0 :(得分:12)
将其更改为:
bar(*s);
答案 1 :(得分:4)
void foo(string* s)
{
bar(*s);
}
s
指向一个字符串,而bar
需要一个(引用一个)字符串,因此您需要bar
指向s
指向的内容。你拼写“s
指向的内容”的方式是*s
。
答案 2 :(得分:2)
将指针转换为引用时,务必确保不要尝试转换NULL指针。编译器必须允许您进行转换(因为通常它无法判断它是否是有效的引用)。
void foo(string* s)
{
if(0 != s){
bar(*s);
}
}
*运算符与&运算符相反。运营商。要将参考转换为指针,请使用& (地址)。要将指针转换为引用,请使用*(内容)。