首頁  >  問答  >  主體

arguments - C++ const 形参和实参的类型问题

最近在学习C++ Primer 5th(英文版), 函数(章节6),P.216。这里有一个例子如下:

voide fcn(const int i) //fcn can read but not write to i。

按照书上自己的定义(P.203),函数的形参和实参的类型必须是匹配的,或者有形参的隐式转换。那么对这个例子来说,我的思路是:

我写了一段代码来测试,编译器报错说不能对只读形参操作。

#include <iostream>
using namespace std;
void const_parameter(const int i);
int main(int argc, char const *argv[])
{
    const int a = 1;
    const_parameter(a);
    return 0;
}
void const_parameter(const int i){
    ++i; // try to modify parameter i but failed.
}

我的问题是,为什么这里是只读形参?如果是只读形参,那这个只读形参是怎么接受实参的拷贝的?谢谢!

ringa_leeringa_lee2764 天前934

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-04-17 15:28:51

    回頭再看了一下自己剛才的思路,其實在第二步就有一個非常大的問題,弄混了const的 initialization 和 assignment。 在 pass by value 這個過程中,進行的操作其實是用 argument 對 parameter 進行初始化,而不是 assignment。而對於const來說,初始化的時候是允許給一個const類型的初始值的,例如:

    const int i = 10;
    const int j = i; //no problem at all!

    所以先前function 裡的這個parameter 的定義已經很清楚了,不管你怎麼轉換,不管你argument 裡是啥值,來了都得給我變成const int類型,這也是為什麼i不可寫的原因。
    真是不寫程式不知道自己有多蠢。 。 。

    回覆
    0
  • 取消回覆