代码之家  ›  专栏  ›  技术社区  ›  Armen Tsirunyan

强制某些操作员成为成员的理由

  •  22
  • Armen Tsirunyan  · 技术社区  · 14 年前

    C++中有4个操作符,它们可以重载,但不能作为独立的(AKA非成员,独立)函数重载。这些操作员是:

    • operator =
    • operator ()
    • operator ->
    • operator []

    This thread 操作员= 成为一个非成员函数。其他三个有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  19
  •   Cheers and hth. - Alf    14 年前

    在最初的帖子中提到的四个运营商, = , () -> []

    比亚恩·斯特劳斯特罗普的理论基础是,正如我从之前关于这个问题的辩论中所回忆的那样,在语言中保持某种理智,即至少有一些东西是你可以依赖的,不管其他人在为现有类定义非成员运算符时搞砸了多少。

    编辑

    干杯。,

        2
  •  2
  •   sbi    14 年前

    这个 thread

    委员会成员弗朗西斯·格拉斯伯罗说:

    运算符=的左侧操作数上的提升,在

    尽量避免以下情况:

    class A {};
    
    class B { B(A& a) {} };
    
    int operator()(B const& b) { return 0; }
    
    
    int main(void)
    {
        A a;
    
        // This works even though A doesn't have a () operator
        // It creates a temporary B and calls operator()(B& b)
        return a();                   
    }