2016-12-16 140 views
1

我目前正在重構了一些代碼,不知道函數是在以下(即分配到返回引用的函數)實際上是不好的風格(至少它看起來怪異):分配到返回參考

#include <iostream> 

class A{ 
    public : 
     double & operator()() { 
      return this->x; 
     }; 

     double operator()() const{ 
      return this->x; 
     }; 

    protected : 
     double x = 0.0; 
}; 

int main(){ 
    A a; 
    a() = 4.0; 
    std::cout<<a()<<std::endl; //prints 4.0 as expected. 
}; 

這背後的背景是,我有一些代碼,並行和使用類似的工作原理:

A.d 

根本就不是一個選項,而:

A() 

會工作,因爲我可以將選擇的內存留給一個函數。

(我知道的編碼風格是有些主觀的問題,但我是一個科學家,而不是一個軟件工程師和良好做法給予反饋)

+0

這取決於什麼A是,是否 「調用」 一個使一個可讀的故事。您可能對此答案感興趣:http://stackoverflow.com/questions/41149115/is-overloading-operator-for-a-reconstruction-a-good-practice/41150295#41150295 –

回答

4
a() = 4.0; 

這是不是真的不好的做法。每次你正在做的事情相當於取消引用容器:

a[i] = 4.0; 

這裏operator[]返回一個參考,而你分配它。

operator()在這裏可能不是更具可讀性的選擇。根據代碼的情況下,像operator*可能是一個更好的選擇,但是這是見仁見智的問題;)

#include <iostream> 

class A{ 
    public : 
     double & operator*() { 
      return this->x; 
     } 

     double operator*() const{ 
      return this->x; 
     } 

    protected : 
     double x = 0.0; 
}; 

int main(){ 
    A a; 
    *a = 4.0; 
    std::cout<<(*a)<<std::endl; //prints 4.0 as expected. 
}; 

double & operator()() { 
    return this->x; 
}; 

注意,定義,當你不需要尾隨;功能。這樣做:

class A{ 
    // ... 
    double & operator()() { 
     return this->x; 
    } 
    // ... 
}; 

或者:

class A{ 
    // ... 
    double & operator()(); 
    // ... 
}; 

double & A::operator()() { 
    return this->x; 
}