【发布时间】:2020-06-16 17:54:21
【问题描述】:
尽管我很喜欢 C++ 编程,但有一件事我真的不明白。在我看来,最常见的函数编程方式是这样的:
some_function(a variable)
do something according to the data in the variable
示例:
bool match_name(const std::string& name)
{
return this->name == name;
}
我发现自己在代码中对 90% 的函数参数使用了 const ref(也许我做错了什么)。
我的问题是:为什么变量的副本是“默认”类型的参数?为什么 const ref 不是默认值?
为什么不这样呢?:
void my_function(My_type object) // <- const ref
void my_function(ref My_type object) // <- ref (mutable)
void my_function(copy My_type object) // <- copy
【问题讨论】:
-
void my_function(My_type object) // <- const ref会让 C 代码在 C++ 中运行非常痛苦。 -
这里的一件大事是,在最初创建该语言时甚至不存在引用。在大多数情况下,更改基本语法是一个大问题。更不用说向后兼容性了。
-
因为 C++ 是从 C 开始的,带有类
-
我猜,从历史上看(以及在 C 时代),许多(如果不是大多数)函数并不期望修改它们的参数,而是返回一个计算值。例如。标准函数,如
sqrt(x)、sin(x)和(如果实现为函数而不是宏)max(a,b)。 -
C++ 有很多错误的默认值,Rust 默认使用 move,有
mut(able) 而不是const,...
标签: c++ pass-by-reference pass-by-value