【发布时间】:2022-09-21 22:09:17
【问题描述】:
我试图查看 std::any 对象是否可以转换为引用类型,并查看更改转换的引用是否意味着更改原始对象。如下:
struct My {
int m_i;
My() : m_i(1) {}
My(const My& _) : m_i(2) {}
My(My&& m) : m_i(3) {};
My& operator = (const My& _) { m_i = 4; return *this; }
My& operator = (My&& _) { m_i = 5; return *this; }
};
int main() {
any a = My();
My& b2 = any_cast<My&>(a);
b2.m_i = 6;
cout << any_cast<My>(a).m_i << endl;
return 0;
}
它打印2。对于我来说,我希望,只要b2 是一个参考,我希望更改b2.m_i 会影响a.m_i,对吧?但结果似乎不像我的预期。
我哪里错了,我的期望是否有效?
谢谢!
-
cout << any_cast<My>(a).m_i << endl;创建a的副本,并且复制构造函数执行My(const My& _) : m_i(2) {},即它不复制值。将此行更改为std::cout << std::any_cast<My&>(a).m_i << std::endl;或正确实现复制构造函数。
标签: c++ casting reference c++17 any