首頁  >  問答  >  主體

C++的函数关键字const的疑问

先说一下引用调用

C++有这样一段代码

#include<stdio.h>
void swap(int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}
int main(void)
{
    int a = 1, b = 2;
    printf("a=%d, b=%d\n", a, b);
    swap(a, b);
    printf("a=%d, b=%d\n", a, b);
    return 0;
}

这里面的 & 表示是引用调用,也就是直接将实参传到函数,而不是将实参拷贝给形参,然后形参传进函数,所以这样的方式可以更改实参的值。

C++中有关键字 const

情况一

void avoidchange(const int x)

书上说const关键字可以防止函数内部修改参数,那么这样的方式是调用的时候将实参拷贝给形参,然后对形参进行操作,那么就算改变了形参的值又有什么影响呢?

所以说这种情况下这样使用const应该是没有必要的吧?

情况二

还是说应该这样使用

void avoidchange(const int & x)

这样将实参直接传给函数,就少了拷贝给形参的过程,所以会更快(int参数还不明显,假如是某个比较大的结构体或者类对象就更为明显了),但是这种情况下可能不想在函数内部更改传入的实参,所以就要加个const既提醒开发者,又提醒编译器。

我这样的理解是不是对的?

另外对于const、以及C++函数的定义和调用还有哪些需要知道的知识点?

PHP中文网PHP中文网2765 天前787

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-17 12:08:43

    就真正開發實踐來說,大多數情況下const都是修飾內存地址,因為在函數內部中,很有可能對內存地址進行修改,對於參數訪問,就算你對變量(這裡區別於內存地址)進行修飾,一樣能透過記憶體存取進行修改。樓主可以看看實際應用上來討論這些問題,

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 12:08:43

    const還有一個作用:類別方法將const寫在後面可以表示該方法不會對this物件產生副作用,這樣修飾getter等函數可以提高編譯器產生的程式碼的效率。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 12:08:43

    情況一: 有必要, 確實如你所說, 就算在函數內部改變了變數, 對外部的實參也沒影響, 這個限定符是針對函數內部的形參的, 那麼, 為參數加上限定符表示不希望這個變數在函數中被修改, 也就是說, 函數編寫者想要傳什麼值, 你就用什麼值, 不要在函數內部修改它.
    情況二: const 還可以修飾類的屬性和方法, 具體你可以查下資料.

    回覆
    0
  • 取消回覆