【发布时间】:2018-11-16 02:36:00
【问题描述】:
我正在尝试将具有 const 成员的结构添加到 priority_queue。
这是一个最小的例子:
#include <queue>
struct A
{
A(const int& i)
: m_i(i)
{
}
bool operator<(const A& other) const
{
return m_i < other.m_i;
}
const int& m_i;
};
int main()
{
std::priority_queue<A> q;
int i = 3;
const int& f = i;
q.emplace(f);
return 0;
}
我理解这个错误
错误 2 错误 C2582: 'operator =' 函数在 'A' c:...\algorithm 2322 中不可用
我的 A 没有 operator= 重载,因为它不能因为 const int& i。
我有办法让它工作吗?
成员必须是引用,并且只能在此引用上调用 const 函数,但我不介意结构中的值是否更改。
我尝试使用 int& const m_i 并实现 operator=,但我无法使用 const int 参数初始化 emplace(而且我可能不太了解 & const 与 const& 的区别)。
【问题讨论】:
-
常量引用不存在。你想要一个指向 const 的指针。
-
我开始想这么多,你有什么原因吗?谷歌只是显示我通过 const ref 链接(而不是引用到 const)
-
@turoni 人们在表示“对 const 的引用”时使用“const 引用”。没有“const 引用”(字面意思),因为引用是不可修改的(不能用来引用另一个对象),所以 const 限定符没有意义。
-
@turoni 不。您正在更改引用的对象。
-
@turoni
std::cout << a << std::endl现在将打印6。c是对对象a的引用。语句c=b更改了引用的对象a,但不会导致c引用另一个对象