c++ * vs & in function declaration
Possible Duplicate:
Difference between pointer variable and reference variable in C++
什么时候应该将变量声明为指针,而不是引用传递的对象?它们在汇编中编译为相同的东西(至少是渐进运行时的),那么我什么时候应该使用哪个呢?
1 2 | void foo(obj* param) void foo(obj& param) |
我的规则很简单:当您想显示值是可选的,因此可以是0时,请使用*。
排除在规则之外:所有的对象都存储在容器中,你不想让你的代码看起来很难看,因为在任何地方都使用
我遵循谷歌风格指南标准,因为它对我来说最有意义。它指出:
Within function parameter lists all
references must be const:
1 void Foo(const string &in, string *out);In fact it is a very strong convention
in Google code that input arguments
are values or const references while
output arguments are pointers. Input
parameters may be const pointers, but
we never allow non-const reference
parameters.One case when you might want an input
parameter to be a const pointer is if
you want to emphasize that the
argument is not copied, so it must
exist for the lifetime of the object;
it is usually best to document this in
comments as well. STL adapters such as
bind2nd and mem_fun do not permit
reference parameters, so you must
declare functions with pointer
parameters in these cases, too.
使用指针的一个原因是,如果向函数传递
(但是,通过执行复杂的操作,仍然可以将空值传递到引用参数中。在这种情况下,调用的函数可能会崩溃。)
另一种约定是,如果将指针传递到函数中,该函数可以使用指针取得对象的所有权(特别是在类COM的引用计数环境中)。如果传递一个引用,则被调用的函数可以在函数调用期间使用该对象,但不能保留指向该对象的指针以供以后使用。
指针和引用之间的另一个区别是,这意味着除非将一个引用传递给构造函数,否则您将无法保留该引用。传递指针可能意味着一个对象可能会保持一段时间,就像复合模式对象一样。
我在C++应用中使用指针而不是引用的一个很好的原因是可读性。当使用指针时,您会看到实际发生的事情,当使用指针时,语法会告诉您实际发生的事情。
"0"或"空"也一样。我更喜欢使用"空",3个月后,当我看到如下代码时:
1 2 | somevar_1 = 0; somevar_2 = NULL; |
我知道