<分区>
我试图理解以下情况,它的行为与我的预期不同。
给定以下代码示例:
class ConstTestClass
{
std::deque<unsigned long long> deque;
public:
const std::deque<unsigned long long int> &getDeque() const{return deque;}
};
int main()
{
ConstTestClass constTestClass;
auto constDeque = constTestClass.getDeque();
constDeque.emplace_back(1ULL);
}
我希望调用 constDeque.emplace_back(1ULL);
失败,因为我期待 constDeque
作为对 const std::deque<>
的引用, 但它实际上在 GCC 5.4.0 上编译没有任何错误。
如果我将上面的行更改为 const auto constDeque = constTestClass.getDeque();
它无法按预期编译,因为 constDeque
now 是预期的类型。
我试图理解为什么 auto
可以从返回类型中删除 const-ness 以及我理解的错误所在。
编辑: 这不是重复回答。我仍在寻找一种方法来确保调用者始终获得对内部对象的 const 引用(或指针),因此调用者将看到内部对象的状态更改而无法修改它。