“const * int”或只是“int”作为函数参数。有什么不同?

时间:2013-02-16 16:07:36

标签: c++ function reference argument-passing

void test(const int* pInt)

void test(int pInt)  

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

3 个答案:

答案 0 :(得分:1)

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

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

在大多数用法中,它们都是一样的。 个人资料个人资料。编写代码以便于阅读,只有当您知道它们是值得的时才进行这些小优化。

这适用于int - 如果您传递的是大型结构,如果复制省略不能应用于该特定情况,则传递值可能成为瓶颈。因此传递指针会更快,但我仍然使用引用。

答案 1 :(得分:1)

取决于您对函数内部参数的处理方式。如果你经常取消引用指针,那么你就是间接的,并且会比你刚刚将值作为变量传递更多的工作。

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

答案 2 :(得分:0)

  

两个示例pInt都无法在函数内部更改!

然后你忘记了第二个函数的const。意识到您可以在第二个函数中根据需要更改pInt值,但是因为整个事件都作为值传递,所以任何更改都不会影响其他任何内容。

你不想这样做吗?

  

void test(const int pInt)

如果你这样做,你的函数将有一个const int(作为参数传递)。

相关问题