【问题标题】:Passing const& as a function argument将 const 作为函数参数传递
【发布时间】:2012-03-09 18:19:02
【问题描述】:

const & 作为参数传递给函数会有什么问题吗?

最近,我们将所有出现的按值传递的对象重写为通过引用传递&const &(如果适用)。

没有编译器错误。

应用程序是 Windows 服务,无法启动。我们没有调试版本,所以我在这里问。

【问题讨论】:

  • 视情况而定。我建议你创建一个调试版本,并调试问题。
  • 如果之前您通过值传递所有内容。而您只是将它们更改为引用,那么它们应该全部更改为 const& 否则您将更改代码正在执行的操作。如果任何方法正在修改参数,则需要制作本地副本而不是修改原始参数(否则您正在更改代码的含义)。
  • 您为什么要进行此更改?如果你有void func(int param),你可以把它改成void func(const int &param),但是它对你有什么好处呢?

标签: c++ pass-by-reference


【解决方案1】:

因此,您的应用程序行为可能发生变化的一种方式是:如果您盲目地通过 & 传递以前按值传递的东西,请修改它的状态,而旧代码不希望发生状态更改并假设传递给函数的对象仍处于传递之前的状态。

经过& 会引起麻烦,而不是const&。除非... grep const_cast 的代码库。

【讨论】:

  • 您不需要const_cast。考虑一个包含指针成员的类。使对象const 并不能保护被指向的东西。
  • 使类实例const 有效地使所有成员const,因此int *my_ptr 形式的类成员有效地变为int *const my_ptr。但这与const int *my_ptr 不同。
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 2012-02-25
  • 2018-01-20
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多