所以我有一个名为MusicComposer的类,它有一个AudioSignal对象作为名为music的数据成员。音乐是非常态的。但是,我需要在一个名为getMusic的方法中将音乐作为const AudioSignal返回。
在源文件中:
const AudioSignal& MusicComposer::getMusic(){
}
音乐声明为:
AudioSignal music;
^这是在头文件中。
我将音乐声明为非const,因为音乐需要在getMusic方法返回之前进行更改。但是,我无法弄清楚如何返回它的const版本。如何返回const版本的音乐?
答案 0 :(得分:2)
C ++可以随时自动将mutable更改为const
。没什么大不了的。它采用其他的方式很难。
return music;
如果确实希望明确表示你可以做到这一点,但它的代码很奇怪,而且很糟糕。
return static_cast<const AudioSignal&>(music);
此外,Cyber观察到getter方法本身通常是const,即使MusicComposer
为const
,也可以调用它们。
const AudioSignal& MusicComposer::getMusic() const {
^^^^^
答案 1 :(得分:1)
看看这个例子:
#include <iostream>
class A { // declare class A
int integer;
};
class B { // declare class B
public:
const A& get() { // get() will return a const ref
return a; // here it is returning the ref of data member a
}
private:
A a;
};
int main() {
A a;
B b;
a = b.get();
return 0;
}
如potatoswatter所述,
const
是访问对象的表达式的属性,而不是对象本身