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;
}
这里面的 & 表示是引用调用,也就是直接将实参传到函数,而不是将实参拷贝给形参,然后形参传进函数,所以这样的方式可以更改实参的值。
void avoidchange(const int x)
书上说const关键字可以防止函数内部修改参数,那么这样的方式是调用的时候将实参拷贝给形参,然后对形参进行操作,那么就算改变了形参的值又有什么影响呢?
所以说这种情况下这样使用const应该是没有必要的吧?
还是说应该这样使用
void avoidchange(const int & x)
这样将实参直接传给函数,就少了拷贝给形参的过程,所以会更快(int参数还不明显,假如是某个比较大的结构体或者类对象就更为明显了),但是这种情况下可能不想在函数内部更改传入的实参,所以就要加个const既提醒开发者,又提醒编译器。
我这样的理解是不是对的?
另外对于const、以及C++函数的定义和调用还有哪些需要知道的知识点?
PHP中文网2017-04-17 12:08:43
就真正開發實踐來說,大多數情況下const都是修飾內存地址,因為在函數內部中,很有可能對內存地址進行修改,對於參數訪問,就算你對變量(這裡區別於內存地址)進行修飾,一樣能透過記憶體存取進行修改。樓主可以看看實際應用上來討論這些問題,
PHP中文网2017-04-17 12:08:43
const
還有一個作用:類別方法將const
寫在後面可以表示該方法不會對this物件產生副作用,這樣修飾getter等函數可以提高編譯器產生的程式碼的效率。
ringa_lee2017-04-17 12:08:43
情況一: 有必要, 確實如你所說, 就算在函數內部改變了變數, 對外部的實參也沒影響, 這個限定符是針對函數內部的形參的, 那麼, 為參數加上限定符表示不希望這個變數在函數中被修改, 也就是說, 函數編寫者想要傳什麼值, 你就用什麼值, 不要在函數內部修改它.
情況二: const 還可以修飾類的屬性和方法, 具體你可以查下資料.