第二个const在下面的结构中做了什么? (它只是一个示例功能)。
据我所知,第一个const使函数返回一个常量对象。但我无法弄清楚标识符之前的const是什么。
首先我虽然它返回了一个指向常量对象的常量指针,但我仍然可以重新分配返回的指针,所以我猜这不是这种情况。
const SimpleClass * const Myfunction()
{
SimpleClass * sc;
return sc;
}
答案 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?
感兴趣