Getter işlevleri yerine const başvurularını kullanabilir miyim?
#include <string>
class cTest
{
private:
int m_i;
std::string m_str;
public:
const int & i;
const std::string & str;
cTest(void)
: i(m_i)
, str(m_str)
{}
};
int main(int argc, char *argv[])
{
cTest o;
int i = o.i; // works
o.i += 5; // fails
o.str.clear(); // fails
return 0;
}
şöyle ben, alıcılar kullanarak atlatabilir merak
. Kaybettiğim ciddi dezavantaj var mı? Lütfen avantaj ve dezavantajlar listesine katkıda bulunun ve gerekirse bunları düzeltin.
Avantajları: alıcı fonksiyonlarının çağrıları yoluyla hiçbir havai yoktur
- .
- Program boyutu küçülüyor çünkü daha az işlev var.
- Sınıfın içeriklerini hala değiştirebilirim, referans değişkenleri bir soyutlama katmanı sağlar.
Dezavantajları:
- yerine alıcı fonksiyonları, ben referansların bir grup var. Bu nesne boyutunu artırır.
const_cast
'u kullanarak, kullanıcılar özel üyeleri dağıtabilir, ancak bu insanlar yaramaz değil mi?1) tedarik (ve dolayısıyla sürdürmeniz gerekir) a: gerçekten de (bir kenara da ben de "ağır" kategorisinde koymak hangi söz 2 dezavantajın)
Veriler için daha verimli bir gösterim kullanmak istediğinizde gün söz konusu değildir ve bu türlere geçerli bir başvuruma gereksiniminiz olduğundan bunu yapamazsınız. – chris
@chris: Bu iyi bir nokta. Bir yapılandırma hatası döndüren bir işleviniz olsa bile, veri modelinizin değişmesi durumunda bir değer kopyasının döndürülmesi için bunu her zaman yeniden düzenleyebilirsiniz. – Bathsheba