将参数作为const传递给内存复制吗?

时间:2017-04-18 14:26:12

标签: c++ pointers memory optimization reference

我有一个简单的问题。这是我的C ++代码:

#include <iostream>
using namespace std;

void example(const int someArgument)
{
    cout << someArgument << endl;
}

int main()
{
    int someArgument = -1;
    example(someArgument);
}

运行example(someArgument)是否在someArgument的内存中复制,或者只将地址传递给变量?我假设编译器“知道”我不会通过使用const关键字来修改它,因此不必进行复制。我错了吗?

2 个答案:

答案 0 :(得分:5)

你正在传递价值,是的,它会复制。

如果您不想复制,请通过指针或引用传递参数。但是,在这种情况下,您传递一个int,所以我不担心按值传递。

我的经验法则是按值传递基本类型,如果可能的话,通过const引用传递所有其他类型。

答案 1 :(得分:0)

关键字 const 不会告诉您是否复制该变量,您基本上有3个选项......

void example(const int someArgument)

void example(const int& someArgument)

void example(const int* someArgument)

你拥有的那个是你给出的论点的副本并写入 someArgument 变量..

所以用 void example(const int someArgument)你传递的值是一个整数,所以是一个副本(你不能改变,因为它是const)