使赋值运算符在声明上工作
make assignment operator work on declaration
我试图创建一个不可变的Angle类(如下所示(。 Angle z = 42;
不起作用。我如何让它工作?样本:
Angle a(1); // works
Angle b; b = 2; // works
Angle c {25}; // works
Angle d {26.0}; // works
Angle e = 27.0; // doesn't compile -- why not?
auto f = Angle(28.0); // works
源:
class Angle {
double _angle;
public:
explicit Angle(double value) noexcept : _angle(wrap0To2Pi(value)) {}
Angle() = default;
Angle(const Angle& angle) noexcept : _angle(angle._angle) {}
Angle(const Angle&& angle) noexcept : _angle(angle._angle) {}
operator double() const { return _angle; }
Angle& operator=(const Angle& f) noexcept { _angle = f._angle; return *this; }
Angle& operator=(double t) { _angle = wrap0To2Pi(t); return *this; }
Angle operator+(Angle value) const { return Angle(_angle + value._angle); }
Angle operator-(Angle value) const { return Angle(_angle - value._angle); }
Angle operator*(Angle value) const { return Angle(_angle * value._angle); }
constexpr static double DEFAULT_ANGLE_TOLERANCE = 0.0001;
bool equals(Angle value, double tolerance = DEFAULT_ANGLE_TOLERANCE) const; // needs to wrap
bool operator==(Angle value) const { return equals(value); }
bool operator!=(Angle value) const { return !equals(value); }
...
还有什么我应该在这里改变的吗?谢谢你的时间。
在表单的定义中
Angle e = 27.0;
只有初始化,没有赋值。这将尝试调用将接受double
参数的Angle
构造函数。但是,由于已将Angle(double)
构造函数标记为explicit
,因此无法使用此语法执行此转换。
如果您希望此功能正常工作,请删除 explicit
关键字。
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 使赋值运算符在声明上工作
- 友元类不工作 C++ 、'class T'阴影模板参数的声明
- void(*var_name)(data_type) - 该声明如何工作
- 当通过声明表达式调用时,static_assert应该可以工作
- 功能仅声明,但仍在工作
- 我如何使用关系 btwn 3 整数来确定三角形和/或我可以使用什么声明来使这个程序工作
- __cplusplus宏告诉 g++ C 标头声明工作不奇怪
- 这C++模板成员函数声明如何工作
- 隐式声明(对象级)成员函数如何根据 ISO C++11 标准工作
- 即使在使用函数之前没有函数声明,C++ 程序也可以工作
- 在正向声明的情况下,编译器是如何工作的,Makefile是如何发挥作用的
- 类数组是如何工作的(c++)?它在声明时得到内存吗
- 数组声明如何在C++中工作
- glActiveTesture和GL_TEXTURE0不工作,都是未声明的标识符
- 声明在内存中的工作方式