dem*_*xSH 4 c++ pointers pass-by-reference
由于我想将未初始化的指针传递给函数,因此会出现运行时错误.但如果我将此指针作为参考传递,它就可以正常工作.我无法解释为什么......
class Body
{
};
void check(Body* b)
{
b = new Body();
}
void checkRef(Body* &b)
{
b = new Body();
}
int main001()
{
Body* b;
//check(b);// error: The variable 'b' is being used without being initialized. (in VS2010)
checkRef(b); // OK
return 0;
}
Run Code Online (Sandbox Code Playgroud)
什么是传递给check和checkRef的差异?我在VisualStudio2010中遇到运行时错误.错误:正在使用变量'b'而未进行初始化.
编辑:这是一个VS2010调试输出.发布版本中不会出现"错误"
为了与checkRef
版本等效,您的check
函数应为:
void check(Body** b)
{
*b = new Body();
}
Run Code Online (Sandbox Code Playgroud)
并称为
check(&b);
Run Code Online (Sandbox Code Playgroud)
如果你没有像你一样传递地址,check(b)
那么你传递的指针的当前值b
确实是未初始化的.
In b 是inBody * &b
的别名/引用- 因此当您分配给它时,您会修改in 。In b 是in的本地副本,您正在修改此本地副本而不是in 。b
main
b
main
Body* b
b
main
b
main
您的运行时错误可能是由于使用了未初始化b
的main
.
编辑:您得到的实际错误是编译器嵌入到代码中的额外检查典型问题机制。它检测到您传递了未按值初始化的内容,这是没有意义的,因此会生成此错误。
如果禁用此行为,应用程序将显示正常运行,直到您尝试取消引用未初始化b
的main
归档时间: |
|
查看次数: |
4794 次 |
最近记录: |