【发布时间】:2022-01-21 05:47:15
【问题描述】:
[我编辑了我的问题以回答我得到的第一个 cmets。]
众所周知 据说当我们不打算修改函数内的输入值时,将const添加到函数参数中被认为是一种良好的编程习惯和一种优化编译的方法;例如,请参阅以下线程:
为了更清楚,我的意思是:
int my_function(const int i, const my_struct *p) {
/* where `my_struct` is a large struct previously defined by me */
/* Both `i` (passed by value) and `p` (and/or `*p`?) are meant to remain unchanged during all this function */
[...]
}
但是,我在这个 C++ 教程中读到了以下句子:https://www.cplusplus.com/doc/tutorial/functions/:
因此,
const引用提供了类似于按值传递参数的功能,但提高了大类型参数的效率。这就是为什么它们在 C++ 中对于复合类型的参数非常流行。但请注意,对于大多数基本类型,效率没有明显差异,在某些情况下,const引用甚至可能效率更低!
那么,在哪些情况下将const 添加到函数的某些参数或参数可能会导致代码效率降低?任何提示或任何一般经验法则? p>
注意:我使用 C 编程,而不是 C++。我知道您只能在 C 中按值传递变量。但是,我知道在函数期间指定参数何时保持不变仍然很有用。
我坚持:我的问题不是关于按引用传递还是按值传递。我正在用 C 编程,所以我假设参数是按值传递的。 我的问题是不建议使用 const。
编辑(重新打开我的问题后):
正如一些人在下面的 cmets 中所说,我可能误解了我上面引用的文本,因为它似乎指的是 C++ 案例,其中变量/参数/参数可以通过引用函数来传递,即C 中的情况并非如此。
无论如何,最后,我怀疑在某些情况下使用const 是否效率低下,我认为这已经在接受的答案中得到了回答。
【问题讨论】:
-
"众所周知" --> "有人断言"。
-
n some cases, const ***references***在 C 中没有引用。你问的是 C 还是 C++? -
放大:您关注的评论主要是关于传递值vs。通过引用传递(这在 C 中甚至不相关)。
constness 与该点没有直接关系。 -
另外,虽然有些人确实推荐
const函数参数作为风格和意图信号的问题,但它与现代编译器的优化无关。编译器不需要你告诉它你是否修改了函数体中变量的任何特定参数。 -
这个问题不应该被关闭,至少不是因为不够清晰。它基于一个错误的前提,但提出的问题似乎很清楚。
标签: c function compilation arguments constants