2013-03-05 58 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的评论总结了一切。

我可能完全没有,但这似乎是一个学校任务或什么?