RC.*_*RC. 39
有些人喜欢在传递对象实际上要修改的情况下更好地传递指针.当对象通过引用传递时,它们使用pass-by-const-reference以避免对象的副本,但不会在函数中更改.
在插图中,请执行以下功能:
int foo(int x);
int foo1(int &x);
int foo2(int *x);
Run Code Online (Sandbox Code Playgroud)
现在在代码中,我执行以下操作:
int testInt = 0;
foo(testInt); // can't modify testInt
foo1(testInt); // can modify testInt
foo2(&testInt); // can modify testInt
Run Code Online (Sandbox Code Playgroud)
在调用foo vs foo1时,从调用者角度(或读取代码的程序员)来看,该函数可以修改testInt而不必查看函数的签名.查看foo2,读者可以很容易地看到该函数实际上可能会修改testInt的值,因为该函数正在接收参数的地址.请注意,这并不能保证对象实际被修改,但是在使用引用和指针时保持一致有帮助.通常,如果要始终如一地遵循此准则,则应始终在要避免复制时传递const引用,并在希望能够修改对象时传递指针.
Tho*_*ini 23
对于这个问题,C++ FAQ有一个非常好的答案:
尽可能使用引用,并在必要时使用指针.
只要您不需要"重新安装",引用通常优先于指针.这通常意味着引用在类的公共接口中最有用.引用通常出现在对象的皮肤上,而指针则出现在内部.
上面的例外是函数的参数或返回值需要"sentinel"引用 - 一个不引用对象的引用.这通常最好通过返回/获取指针,并给出NULL指针这一特殊意义(引用应始终别名对象,而不是取消引用的NULL指针).
注意:旧的C语言程序员有时不喜欢引用,因为它们提供了调用者代码中不明确的引用语义.然而,在一些C++经验之后,人们很快意识到这是一种信息隐藏形式,这是一种资产而不是责任.例如,程序员应该用问题的语言而不是机器的语言编写代码.
在现实世界编程中有许多情况,其中参数不存在或无效,这可能取决于代码的运行时语义.在这种情况下,您可以使用NULL(0)来表示此状态.除此之外,
虽然如果花费足够的时间来正确设计代码,可以避免这些情况; 在实践中,每次都不可能.
| 归档时间: |
|
| 查看次数: |
3529 次 |
| 最近记录: |