指针与参考
给一个函数使用原始变量时,更好的做法是:
unsigned long x = 4;
void func1(unsigned long& val) {
val = 5;
}
func1(x);
要么:
void func2(unsigned long* val) {
*val = 5;
}
func2(&x);
IOW:有什么理由选择一个吗?
我的经验法则是:
如果你想对它们进行指针运算,就使用指针(例如,增加指针地址以逐步通过一个数组),或者你必须传递一个NULL指针。
否则请使用参考。
我真的认为您将从建立以下函数调用编码准则中获益:
和所有其他地方一样,永远是const
正确的。
const
说明符。 如果值0 / NULL是当前上下文中的有效输入,则只能通过指针传递值。
理由1:作为一个调用者 ,你会发现无论你传入什么都必须处于可用状态。
理由2:如所称的那样 ,您知道无论进入什么都处于可用状态。 因此,不需要对该值进行NULL检查或错误处理。
理由3:理论1和理论2将被编译器强制执行。 如果可以的话,一定要在编译时发现错误。
如果函数参数是一个out-value,那么通过引用传递它。
只有当该值是POD(普通的旧数据结构)或足够小(以记忆方式)或以其他足够便宜(按时间方式)复制的方式时,才选择“通过值传递”而不是“通过值参考”。
这最终会成为主观的。 迄今为止的讨论是有用的,但我认为这没有一个正确或决定性的答案。 很多将取决于时尚的风格指引和您的需求。
尽管使用指针有一些不同的功能(无论是否为NULL),但输出参数的最大实际区别纯粹是语法。 例如,Google的C ++风格指南(https://google.github.io/styleguide/cppguide.html#Reference_Arguments)只规定输出参数的指针,并且只允许为const的引用。 理由之一是可读性:具有价值语法的东西不应具有指针语义含义。 我并不是在暗示这一定是对是错,但我认为这里的一点是,这是一个风格问题,而不是正确性问题。
链接地址: http://www.djcxy.com/p/20777.html