這裏是一個非常具體的問題!向量(或其他動態容器)內的類變量的C++ const引用
我有一個持有關於一個星球的數據的類。例如,它具有像矢量(double x,double y,double z)來保存其位置的東西,以及一個用於保存其半徑的雙變量。
我經常使用引用來獲取私有變量的「只讀公共訪問」。我調用setter方法來改變私有變量。
但是,我不認爲這是允許在一個動態容器,如矢量或列表。
我已經試過「常數常數」指針,這個想法正在初始化列表初始化一次,他們將不能夠指向任何東西或修改的變量。但編譯時出現相同的錯誤信息。
的消息是這樣的:「錯誤:非靜態const成員const double* const x
,不能使用默認的賦值運算符」
因此,有與複製類時,我就做了「的push_back」問題一個矢量 - 對嗎?
下面是一個例子代碼:
class planet{
private:
double _radius;
public:
// Constructor
planet() : rad(_radius){
_radius = 0.0f;
}
// This is a setter method - works fine
void setrad(double new_rad){
_radius = rad;
}
// This is a better solution to the getter method
// - does not seem to work with dynamic containers!
const double& rad; // This is initialized in the constructor list
};
int main(...){
...
std::vector<planet> the_planets;
planet next_planet_to_push;
next_planet_to_push.setrad(1.0f);
// This causes the error!
the_planets.push_back(next_planet_to_add);
...
}
通過getter方法提供只讀訪問權限時出現了什麼問題?我沒有理由在這裏存儲引用。 – juanchopanza
您需要爲您的Planet類定義一個複製構造函數和賦值操作符。試試星球吧!行星b; a = b; – mythagel
我不確定爲什麼你覺得引用比訪問函數「更好」,但它增加了對象大小和訪問的運行時間成本,並且(如你發現的那樣)阻止該類被簡單地複製。訪問函數應該內聯,在這種情況下,與直接訪問成員相比,不應該有任何開銷。 –