我可以想象一种情况,其中输入参数可以为NULL,因此首选通过指针而不是通过引用?

有人可以增加更多案件吗?

最佳答案

在实际上要修改要传递的对象的情况下,有些对象更喜欢传递指针。当通过引用传递对象时,它们使用pass-by-const-reference来避免对象的复制,但不会在函数中进行更改。

在说明中,采用以下功能:

int foo(int x);
int foo1(int &x);
int foo2(int *x);

现在在代码中,执行以下操作:
int testInt = 0;

foo(testInt);   // can't modify testInt
foo1(testInt);  // can modify testInt

foo2(&testInt); // can modify testInt

在调用foo vs foo1时,从调用者的角度(或程序员阅读代码)来看,该函数可以修改testInt而不必查看该函数的签名并不明显。通过查看foo2,读者可以轻松地看到该函数实际上可以修改testInt的值,因为该函数正在接收参数的地址。请注意,这不能保证实际修改了对象,但是在引用和指针的使用中保持一致是有帮助的。通常,如果要始终遵循此准则,则在避免复制时应始终传递const引用,而在希望能够修改对象时应始终通过指针传递。

08-07 06:24