gpt4 book ai didi

c++ - 带有引用的自动关键字行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:04 28 4
gpt4 key购买 nike

假设我有一个简单的 C++ 类,其中包含一个私有(private)成员和一个 getter:

class MyClass
{
private:
double m_testValue = 1;

public:
double& getTestValue(){return m_testValue;}
}

现在假设我想调用 getter 来获取我的引用并编辑此值(并在值之前/之后打印)

auto testVal = myClassInstance.getTestValue();
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
testVal = 3;
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;

输出是

1
1
1
3

这不完全是我所期望的,因为显然 m_testValue 没有被编辑。事实上,如果我用 double& 替换 auto :

double& testVal = myClassInstance.getTestValue();
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;
testVal = 3;
std::cout << myClassInstance.getTestValue() << std::endl;
std::cout << testVal << std::endl;

我明白了

1
1
3
3

这就是我想要的。所以问题是:这是 auto 关键字的预期行为还是一个错误?如果这是预期的,那么这种行为的原因是什么?这是技术限制吗?如果是故意的,为什么?

最佳答案

当推导auto时,不会推导到引用。它总是推断出值(value)。如果您想引用返回值,您可以使用 auto&const auto&auto&&

是的,这是设计使然。任何其他行为实际上都会非常令人惊讶。更糟糕的是,在需要时很容易使用引用。但是,想象一下 auto 实际上会被推断为引用。您将如何(在句法上)使其成为一个值?

关于c++ - 带有引用的自动关键字行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37394105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com