-3
void test(const int* pInt)

或者

void test(int pInt)  

我知道第一个示例使 pInt 受到某种保护。但是哪种解决方案可以提供更高的性能?因为两者(const 指针和普通 int)都必须在内存中注册。

4

3 回答 3

1

取决于你对函数内的参数做什么。如果您非常频繁地取消引用指针,那么您是间接的,并且将比您刚刚将值作为变量传递更多的工作。

您是否认为这种选择会在您的应用程序中导致性能折衷?你在你的函数实现中做了什么,为什么你认为一个可能比另一个更快?

于 2013-02-16T16:21:47.707 回答
1

从技术上讲,第二个可以更快,因为第一个受别名影响 - 无法判断是否pInt在函数之外没有修改。仅仅因为在pInt方法const内部,并不意味着作为参数传递的原始变量必须是const- 记住非const转换const是隐式的。

_restrict如果编译器支持,将使用此问题的解决方法。请注意,这是固有的,而不是语言的一部分。

但在大多数情况下,它们是相同的。简介简介简介。编写代码以提高可读性,并且仅在您知道它们值得时才进行这些小的优化。

这适用于int- 如果您要传递一个大型结构,如果无法将复制省略应用于该特定情况,则按值传递可能会成为瓶颈。所以传递指针会更快,但我仍然会使用引用。

于 2013-02-16T16:12:20.903 回答
0

both examples pInt can not be changed inside the function!

Then you forgot a const to the second function. Realize that you can change pInt value as you wish in the second function, however since the whole thing was passed as value any changes there won't affect anything else.

Don't you want to do this?

void test(const int pInt)

If you do that, you will have a const int to your function (that was passed as argument).

于 2013-02-16T16:38:50.813 回答