【发布时间】:2022-01-04 08:19:49
【问题描述】:
我不明白我们什么时候可以在集合中使用 const 变量/对象(尤其是 emplace)。下面的代码直接使用 const 对象,但在使用指向 const 对象的指针时不起作用。
#include <list>
class MyData { };
int main() {
std::list<std::pair<int, MyData>> collection1{};
std::list<std::pair<int, MyData*>> collection2{};
const MyData someData{};
const MyData* someDataPtr = &someData;
collection1.emplace_back(1, someData);
//collection2.emplace_back(1, someDataPtr); //Messy template error!
}
我认为使用 emplace_back 而不是 push_back 作为指针并没有太大优势,但我使用 std::pair 来说明该对的另一部分可能是大/昂贵的。
具体来说,我的问题是为什么emplace_back 使用 const 对象而不使用指向 const 对象的指针?有没有合理的方法来实现后者?
对于任何想知道用例的人,我有一个成员函数,它传递对的组成部分,进行一些处理(但不应更改任何数据),然后将对放置到集合中。比如:
void add_to_schedule(const int id, const MyData* myData) {
//some processing
this->collection.emplace_back(id, myData);
}
【问题讨论】:
-
*collection2.front() = something;会修改一个 const 对象,而没有人想要那样。
标签: c++ stl constants c++17 emplace