【发布时间】:2018-07-16 10:44:59
【问题描述】:
让
class A
{
std::vector<std::shared_ptr<int>> v_;
};
现在我想使用两个公共成员函数添加对 v_ 的访问权限
std::vector<std::shared_ptr<int>> const & v() { return v_; }
和
std::vector<std::shared_ptr<int const> const & v() const { TODO }
我不能用return v_; 替换TODO。
一种选择是不返回引用而是返回副本。除了明显的性能损失外,这也会使界面不太理想。
另一种选择是使TODO 等于return reinterpret_cast<std::vector<std::shared_ptr<int const>> const &>(v_);
我的问题是,这是未定义的行为吗?或者,是否有更好的选择,最好不使用reinterpret_cast?
【问题讨论】:
-
与您的问题无关,但为什么您有指向
int(或const int)的指针?如果你有一个指向“数组”的指针,那么向量不是更有意义吗? -
你可以返回一个迭代器
-
int只是一个例子,在实际代码中它是一个大类。 -
关于“性能损失”,您测量过吗?现代编译器非常擅长优化这种情况,尤其是当它可以使用移动语义时。
-
@Someprogrammerdude 我实际上并不关心性能。我可以退回一份副本。但是我最好在非常量的情况下也返回一个副本,以获得统一的接口。这反过来又使得在非常量情况下无法返回
&,而不是const &。
标签: c++ vector undefined-behavior reinterpret-cast const-correctness