在函数中返回 const 不会使变量成为 const?

fel*_*ipe 0 c++ constants

我有以下结构:

class Test {
public:
    int k = 10;
};

class SecondTest {
private:
    Test t;
public:
    const Test& myTest() {
        return t;
    }
};

int main()
{
    SecondTest secondTest;
    Test tt = secondTest.myTest();
    tt.k = 20;
    cout << "tt.k value: " << tt.k;
}
Run Code Online (Sandbox Code Playgroud)

我以为:

const Test& myTest() {
Run Code Online (Sandbox Code Playgroud)

将使返回值成为 const。

但不,我可以简单地分配给一个非常量值,并将其用作非常量值:

Test tt = secondTest.myTest();
Run Code Online (Sandbox Code Playgroud)

打印结果将是

"tt.k value: 20"
Run Code Online (Sandbox Code Playgroud)

这对我来说听起来很奇怪......我是否错过了一些概念?

Jef*_*ica 7

Test tt = secondTest.myTest()
Run Code Online (Sandbox Code Playgroud)

该函数返回对 const 对象的引用。该对象无法修改。

但是该Test tt = ...部分会触发进行复制的复制构造函数。该副本可以修改。

你写过吗

Test& tt = secondTest.myTest()
Run Code Online (Sandbox Code Playgroud)

编译器会发出错误,阻止您获得对此对象的非常量引用。如果您保留了const Test&,那么您将无法修改它。