这种向类成员添加内容的方法在实际工作场景中是否合法使用?当我看着它时,它似乎在语法上并不正确,而且非常不需要。我只是想弄清楚这是否是我在学校课外实际使用过的东西。
C++ 的某些功能源于overload operators 的可能性。一如既往,强大的力量伴随着巨大的责任。操作符可以被重载来做显而易见的事情,例如没有人会对这样的代码感到惊讶
Matrix a{ {1,2},{2,3} };
Matrix c = a + a;
也许您甚至没有注意到这里的+ 是一个自定义运算符。 C++ 本身不能添加两个矩阵。运算符重载的一个缺点是你可以重载它们来做任何事情,有时它并不那么明显。良好的运算符重载与导致代码混乱的运算符之间的界限很窄。
关于您的具体示例,这是一种您也可以在其他地方找到的模式。 Eigen 是一个著名的代数库。他们文档中的一个例子是:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix2d a;
a << 1, 2,
3, 4;
MatrixXd b(2,2);
b << 2, 3,
1, 4;
std::cout << "a + b =\n" << a + b << std::endl;
std::cout << "a - b =\n" << a - b << std::endl;
std::cout << "Doing a += b;" << std::endl;
a += b;
std::cout << "Now a =\n" << a << std::endl;
Vector3d v(1,2,3);
Vector3d w(1,0,0);
std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}
注意使用<< 运算符来设置矩阵元素。他们添加了一些逗号运算符 voodoo,但 << 运算符的使用与您应该实现的非常相似。
这种向类成员添加东西的方法在实际工作场景中是否合法使用?
是的。使用operator<< 将元素“插入”到对象中是完全合法的。您将在各种库中看到运算符重载的这种用法。如果以这种方式使用运算符当然需要适当的文档,因为了解 C++ 语言不足以了解运算符在特定上下文中的实际含义。