c ++*vs&in函数声明

Pau*_*jan 10 c++ pointers reference pass-by-reference

可能重复:
C++中指针变量和引用变量之间的差异

我什么时候应该将我的变量声明为指针vs传递引用的对象?他们在汇编中编译成相同的东西(至少是渐近的运行时),那么什么时候应该使用哪个呢?

void foo(obj* param)
void foo(obj& param)
Run Code Online (Sandbox Code Playgroud)

Myk*_*yev 13

我的规则很简单:当你想要显示该值是可选的时使用*,因此可以为0.

从规则中排除:所有_obj_s都存储在容器中,你不想让你的代码看起来很丑陋foo(*value);而是使用到处而不是foo(value); 那么表示该值不能assert(value);在函数begin处放0 .


Mah*_*ive 6

我遵循Google风格指南标准,因为它对我来说最有意义.它指出:

在函数参数列表中,所有引用必须是const:

void Foo(const string &in, string *out);
Run Code Online (Sandbox Code Playgroud)

事实上,在Google代码中,一个非常强大的约定是输出参数是值或const引用,而输出参数是指针.输入参数可以是常量指针,但我们绝不允许使用非const引用参数.

您可能希望输入参数为const指针的一种情况是,如果要强调不复制参数,则它必须在对象的生命周期内存在; 通常最好在评论中记录这一点.诸如bind2nd和mem_fun之类的STL适配器不允许引用参数,因此在这些情况下也必须使用指针参数声明函数.

  • 我不同意这一点。这是语言中引用/指针概念的误用。引用是为了确保在编译时初始化一个值。这是一个非常强大的契约,其中规定函数只接受初始化值。Java 或 C# 等语言缺乏,这迫使开发人员额外检查传递的值是否为 NULL (null)。我在合同中没有看到我只能接受 const 值的强制执行。 (2认同)