【发布时间】:2015-11-20 15:53:32
【问题描述】:
我关注的是标题中给出的主题。
假设我们有一些非常简单的类
class Integer{
public:
Integer(int number) : m_value(number) {}
int value(){return m_value;}
private:
int m_value;
};
现在我们可以使用这个类,它代表int,当然使用这个类没有更大的意义,但这只是一个例子。如果想让这个类表现得更像一个真正的整数,那么我们应该提供强制转换运算符(不包括运算符 ==、>、
operator T() {return m_value;}
operator T&() {return m_value;}
一些最简单的例子可以编译和使用它们(第一个或第二个),所以我们的类可以如下:
class Integer{
public:
Integer(int number) : m_value(number) {}
int value(){return m_value;}
operator T(){return m_value;} // casting operator
private:
int m_value;
};
但也可以:
class Integer{
public:
Integer(int number) : m_value(number) {}
int value(){return m_value;}
operator T&(){return m_value;} // casting operator
private:
int m_value;
};
同样,所以我的问题是这两个中的哪一个是合适的?当然我不能同时拥有它们,因为编译器将无法识别使用哪一个。
自然参考强制转换似乎更有效,但我不确定它是否会始终按应有的方式工作。请以某种方式告诉我,为什么一个运营商比另一个更好?
【问题讨论】:
-
如果你返回一个引用,那么有人可以捕获它并修改类的私有数据。你想允许吗?
标签: c++ casting reference copy