2012-06-11 16 views
40

olamaz.üye olmayan işlev cv-eleme

template<typename T> 
inline unsigned int abs(const T& t) const 
{ 
    return t>0?t:-t; 
} 

fonksiyonu için const eleme çıkarılmasından sonra bir hata vardır. Fonksiyonun içinde t'u değiştirmediğim için, yukarıdaki kod derlenmiş olmalıdır. Hatayı neden aldığımı merak ediyorum?

cevap

84

t'u değiştirmeme isteğiniz const T& t'da belirtilmiştir. Bitiş const, abs sınıfının üye değişkenlerini değiştirmeyeceğinizi belirtir. Bu işlevin ait olmadığı bir sınıf olmadığı için, bir hata alırsınız

30

İşlev bildiriminin sonunda const değiştirici, üye işlevleri için gizli this parametresi için geçerlidir.

Bu ücretsiz bir işlev olduğundan, this yoktur ve bu değiştiriciye gerek yoktur.

t parametresinin parametre listesine zaten kendi const sahiptir.

12

bir üye işlev cv-eleme this işaretçi tip indirected sahip olduğunu belirtir const (veya volatile, const volatile) ve bu nedenle elemanı işlevi bu niteliklere sahip örnekler üzerinde çağrılabilir.

Boş işlevler (ve sınıf statik işlevleri) this işaretçisine sahip değildir.

1

Hepimizin bildiği gibi, argüman listesinden sonraki const anahtar sözcüğü bunun bir işaretçi sabitinin bir göstergesi olduğunu gösterir.

Üye olmayan bir işlev var, sınıfa ait değil, bu nedenle const karşıt uç hatası oluşur. soruna

Çözüm: bir sınıf üyesi işlevini olmayı ya da const kelime const zıt ucunu kaldırmak ya olduğu

İlgili konular