我正在创建这样的函数:
void SetItem(const Key &key, const Value &value)
{
...
}
其中 Key 和 Value 是某种类型。
在内部,我想像这样存储对:
std::pair<const Key &, Value>
所以这是我的问题: 我需要强制 Key 实际上是一个左值,以便在函数退出时它不会被清理(右值不安全)
我可以为函数签名:
void SetItem(Key &key, const Value &value)
这会阻止使用 r 值,但它不允许使用 const 键,我也不喜欢。
有没有办法在保持常量的情况下强制 Key 成为左值?
我可以创建一个 r 值重载来防止它:
void SetItem(Key &&key, const Value &value)
{
[What do I put here?]
}
谢谢
最佳答案
随着评论的改进,它在完全符合 C++11 的编译器中应该看起来像这样:
class X{
public:
void SetItem(Key const& key, Value const& value);
private:
void SetItem(Key const&&, Value const&) = delete;
};
私有(private)重载将捕获所有 Key
右值。重载解析期间不进行访问检查,因此我们可以将其置于 private
下,这样可能的 friend
也会在编译时得到一条很好的错误消息,我们=删除
它。
对于尚不支持显式删除函数的编译器,您可以将其简单地保留为未定义,但这只会显示为可能的 friend
的链接器错误。但是,一般观众会收到漂亮的“`SetItem' is inaccessible”编译器错误消息。 :)
关于c++ - 如何防止 r 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027510/