我想知道在调用像这样的函数时对用户是否有任何好处
A) void func(int i);
或者类似的函数
B) void func(const int i);
因为在 func 内部,参数 i 无论如何都会被复制到堆栈(或编译器在其优化中选择的任何地方),对于调用此函数的用户来说,A 和 B 之间没有区别。
所以如果一个工具是这样的:
A)
void func(int i)
{
i = another_func(i);
printf("%d", i);
}
或者使用const
B)
void func(const int i)
{
int j = another_func(i);
printf("%d", j);
}
我的问题:
实现 B 有什么优势?编译器可以执行任何类型的优化 ? A 和 B 只是一个简单的例子,这些问题对其他情况也有效。
我明白在指针中使用 const 的好处(例如 const void *data),因为我们告诉用户我们不会修改它的内容,但我不明白 const 的用法,除了警告程序员他不应该修改它的功能,但在我看来,在 API 头文件中使用 const 是没有用的。
感谢您的帮助。
最佳答案
这里有些人说,如果您不更改变量,则应该编写 const
- 因为您可以声明任何局部变量 const
。 (主要目的是防止你不小心改变变量,也可能帮助编译器优化你的代码)
其他人说你不应该声明函数参数 const
,因为它会暴露 API 中的一些实现。
我觉得他们都对!这就是为什么您可以在函数声明中省略 const
的原因:您可以在 header 中编写 void func(int);
,但要实现它 void func(const int i) {}
在代码文件中。
关于C - 对于非指针函数的参数中的 const 用户有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17133103/