【问题标题】:What does overloading the parentheses operator do?重载括号运算符有什么作用?
【发布时间】:2020-02-08 12:48:35
【问题描述】:

我经常看到这个,我想知道它的作用/它的目的。

  1. 重载 operator() 有什么作用?
  2. 为什么人们通常会重载这个运算符?

示例

std::vector<double> operator()(int seed) const;

谢谢!

【问题讨论】:

    标签: c++ class overloading parentheses


    【解决方案1】:

    据我所知,Functors and matrix indexing 是最常见的用例。

    矩阵索引
    对于矩阵类,你可以这样做:

    Matrix3x3 A;
    A(1,2) = 2;
    

    在这种情况下使用括号而不是括号的主要原因是括号运算符只接受一个参数,而括号运算符接受多个参数。

    函子
    如果你想让一个对象充当一个也可以存储信息的函数,你可以这样做:

    Accumulator accumulate;
    for(int i=0; i<20; ++i)
        accumulate(i);
    std::cout << accumulate.sum << std::endl;
    

    在 C++ 中,您还会经常遇到 comparator objects 的函子,即使它们不存储信息。

    【讨论】:

    • 应该提一下,这样做是为了矩阵索引的原因是因为索引运算符只允许恰好一个参数,而parens可以接受任何数字
    • @CruzJean 你是对的。我将编辑我的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2010-09-14
    • 2011-01-24
    相关资源
    最近更新 更多