2013-03-05 55 views
-1

我在C++中編寫了以下3個函數。請向我解釋所有返回類型是如何不同的?以及返回值將如何存儲在內存中?我知道const關鍵字適用於即時左側的任何內容,但我需要更多解釋。函數聲明的返回類型中的const關鍵字

const int* sample1(); 
int* const sample2(); 
int const* sample3(); 
+1

1和3在語義上是相同的。當涉及到「它如何存儲在內存中」時,三者都是相同的,只有在編譯時才考慮const。 – us2012 2013-03-05 12:16:57

+0

爲什麼人們對這個(恕我直言)非常有效的問題下降評級,即使沒有解釋他們爲什麼降低評分。感謝它,但這正是我正在尋找的(我的意思是下面的答案);-) – christianparpart 2015-03-14 08:52:29

回答

2
const int* sample1(); 
int const* sample3(); 

這些功能是相同的。它們返回指向常量內存的指針(這個內存不能通過這個指針改變)。但是我們可以改變指針本身。例如增加它。

int* const sample2(); 

該函數返回指向非常量內存的常量指針。我們不能改變指針本身,但我們可以改變它所指向的內存。

+0

感謝您的幫助 – Sara 2013-03-05 12:25:53

+0

@sara歡迎 – ssgreg 2013-03-05 12:28:08

+0

您不能更改'sample1'或' sample3',在這兩種情況下,它都是非類型的_rvalue_。例如。 'sample1()++;'或'sample3()+ = 1;'不會編譯。 – 2013-03-05 12:29:55

0

常量不必適用於什麼是右側緊鄰。例如

class Foo 
{ 
    void Bar() const; 
    int var; 
} 

這將將禁止功能酒吧美孚來改變對象的任何成員變量。 除此之外us2012的評論總結了一切。

我可能完全沒有,但這似乎是一個學校任務或什麼?