算子超载的实际应用?
Practical applications of operator overloading?
我试图更多地了解运算符重载的实际用途,以便我可以在我的代码中有效地使用它们。
您能描述一下重载通常有用的一般情况吗?也许提供一些简短的例子?
到目前为止,我知道以下内容:
1) 使用带有 STL 算法的重载是一个常见的例子:
class Example
{
public:
int operator()(int i)
{
return i+10;
}
};
int main()
{
std::vector<int> V{1,2,3,4,5};
std::transform(V.begin(), V.end(), V.begin(), Example());
}
尽管我想这现在与 lambda 功能有点多余。
2) 操作对象成员:
class Example
{
public:
int some_variable {0};
Example() {};
Example(int x) : some_variable{x} {};
Example operator+(Example &EO)
{
Example EO3;
EO3.some_variable = some_variable + EO.some_variable;
return EO3;
}
};
int main()
{
Example EO1(100);
Example EO2(200);
Example EO3 {EO1 + EO2};
}
运算符重载只不过是函数重载。它通常用于表示对象的类之间,可以为其定义某种代数,从而形成表达式或特定于域的子语言。
代数对象的典型案例std::complex
见参考,它们是...数字,因此参与数值表达式。
另一个示例是std::vector
和std::array
该模型基于索引的容器,因此会使[]
运算符过载。
std::valarray
向量增加了算术,所以它也实现了+-*/
以及许多数学函数(如sin
、cos
、tan
、sqrt
......
另一个例子是模拟指针的std::shared_ptr
,因此它重载一元*
和->
,或模拟集合上的指针和迭代的各种迭代器,因此重载*
->
==
!=
++
--
+=
-=
特定于域的子语言的一个示例是std::iostream
重载输入/输出的重载<<
和>>
,或者使用运算符形成类似 EBNF 表达式的boost::spirit
(参见)。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 有没有任务栏API可以立即应用注册表更改
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 通过应用超载下标操作员来意外输出
- 算子超载的实际应用?