函数声明的返回类型中的const关键字 我在C++中编写了以下3个函数。请给我解释一下所有的退货类型是如何不同的?返回值将如何存储在内存中?我知道const关键字适用于左边的任何东西,但我需要更多的解释 const int* sample1(); int* const sample2(); int const* sample3();

函数声明的返回类型中的const关键字 我在C++中编写了以下3个函数。请给我解释一下所有的退货类型是如何不同的?返回值将如何存储在内存中?我知道const关键字适用于左边的任何东西,但我需要更多的解释 const int* sample1(); int* const sample2(); int const* sample3();,c++,function,constants,return-value,return-type,C++,Function,Constants,Return Value,Return Type,const不必应用于直接右边的任何内容。比如说 class Foo { void Bar() const; int var; } 这将禁止Foo中的函数栏更改对象中的任何成员变量。 除此之外,us2012的评论总结了这一切 我可能完全不知道,但这好像是学校的作业还是什么 const int* sample1(); int const* sample3(); 这些功能是相同的。它们将指针返回到常量内存。此内存不能通过此指针更改。但我们可以改变指针本身。例如,增加它 int* cons

const不必应用于直接右边的任何内容。比如说

class Foo
{ 
  void Bar() const;
  int var;
}
这将禁止Foo中的函数栏更改对象中的任何成员变量。 除此之外,us2012的评论总结了这一切

我可能完全不知道,但这好像是学校的作业还是什么

const int* sample1();
int const* sample3();
这些功能是相同的。它们将指针返回到常量内存。此内存不能通过此指针更改。但我们可以改变指针本身。例如,增加它

int* const sample2();

此函数返回指向非常量内存的常量指针。我们不能改变指针本身,但我们可以改变指针所在的内存。

1和3在语义上是相同的。当谈到如何将指针存储在内存中时,这三个指针都是相同的,常量仅在编译时考虑。您也不能更改sample1或sample3返回的指针,在这两种情况下,它都是非类类型的右值。例如,sample1++;或样本3+=1;无法编译。@CharlesBailey您当然可以在将其分配给适当的变量后对其进行更改。它是隐含的。@ssgreg:但它是一个不同的对象;您已经复制了它,可以独立应用constness。您可以使用sample2轻松地执行此操作,因此这三个函数之间没有任何区别。例如,int*p=样本2;p++;