const Class * const Function()第二个const有什么作用?

时间:2016-03-05 16:45:08

标签: c++ pointers c++11 reference constants

第二个const在下面的结构中做了什么? (它只是一个示例功能)。

据我所知,第一个const使函数返回一个常量对象。但我无法弄清楚标识符之前的const是什么。

首先我虽然它返回了一个指向常量对象的常量指针,但我仍然可以重新分配返回的指针,所以我猜这不是这种情况。

const SimpleClass * const Myfunction()
{
   SimpleClass * sc;
   return sc;
}

2 个答案:

答案 0 :(得分:3)

const SimpleClass * const Myfunction()
{   
    return sc;
}

decltype(auto) p = Myfunction();
p = nullptr; // error due to the second const.

但事实是,没有多少人使用decltype(auto),你的函数通常被称为:

const SimpleClass *p = Myfunction();
p = nullptr; // success, you are not required to specify the second const.

const auto* p = Myfunction();
p = nullptr; // success, again: we are not required to specify the second const.

和...

const SimpleClass * const p = Myfunction();
p = nullptr; // error

const auto* const p = Myfunction();
p = nullptr; // error

答案 1 :(得分:2)

第二个const表示返回的指针本身是常量,而第一个const表示内存是不可修改的。

返回的指针是临时值( rvalue )。这就是为什么它不是const之所以无关紧要,因为它无论如何都无法修改:Myfunction()++;是错误的。一种感受"感觉"第二个const将使用decltype(auto) p = Myfunction();,并尝试将p修改为José指出。

您可能对Purpose of returning by const value?What are the use cases for having a function return by const value for non-builtin type?

感兴趣