Genelde şablonları nadiren kullanırım - ayrıntılara girmedim - yalnızca sezgisel düzeyde açıklayabilirim
2. durumda, T'nin A * ile doğrudan değiştirilmesi normal olarak derlenir - bu, şablonun derlenmesi gerektiği anlamına gelir
class A {};
void f( A * const ) {}
voidOnStart ()
{
A *a;
f( a ); //нормально
}
1. durumda, doğrudan değiştirme çalışmaz, ancak fazlalık bir T2 parametresi ekleyebilirsiniz - normal olarak onunla derlenir - bu, onsuz olması gerektiği anlamına gelir - bu yüzden gereksizdir
template < typename T, typename T2>
void f( T, const T2 ) {}
class A {};
voidOnStart ()
{
const A *a;
f( a, a ); //нормально
}
Optimizasyon tablosunda aşağı çekme değerinin nasıl görüntülendiği garip. Araçla maksimum düşüş görüntülenir (ancak yüzde olarak yazılır). Ve tek bir testten sonra, göreceli düşüşün maksimumdan farklı olduğu ortaya çıkıyor (yüzde daha büyük veya daha az). Para yönetimini kullanırken, istenen sonuçları görüntülemek için bir şeyler eklemeniz gerekecek mi?
template < typename T>
void f( T, const T ) {}
class A {};
voidOnStart ()
{
A * const a = new A;
f( a, a ); //error: 'a' - cannot convert from const pointer to nonconst pointer
}
Комбинатор : Bu yüzden derler, orijinal sürüm olmamalıdır.
Niye ya?
template < typename T>
struct B {
void f( T, const T ) {}
};
class A {};
voidOnStart ()
{
const A* a;
B< const A*> b;
b.f( a, a ); //нормально
}
yani her şey yolunda. Temelde ne değişti?
template < typename T>
void f( T, const T ) {}
class A {};
voidOnStart ()
{
const A *a;
f( a, a ); //error: 'a' - cannot convert from const pointer to nonconst pointer
}
Neden her iki seçeneğin de derlenmesi gerekiyor?
Genelde şablonları nadiren kullanırım - ayrıntılara girmedim - yalnızca sezgisel düzeyde açıklayabilirim
2. durumda, T'nin A * ile doğrudan değiştirilmesi normal olarak derlenir - bu, şablonun derlenmesi gerektiği anlamına gelir
1. durumda, doğrudan değiştirme çalışmaz, ancak fazlalık bir T2 parametresi ekleyebilirsiniz - normal olarak onunla derlenir - bu, onsuz olması gerektiği anlamına gelir - bu yüzden gereksizdir
Sezgisel olarak, const bazen türün bir parçası ve bazen yalnızca bir tanımlayıcıdır, bu nedenle işlevin içinde işaretçi const olacaktır.
Bu, Print (__FUNCSIG__) aracılığıyla hissedilebilir;
Derlerken hata
Bu yüzden derler, orijinal sürüm olmamalıdır.
Niye ya?
yani her şey yolunda. Temelde ne değişti?
Temelde ne değişti?
Fark çok büyük! İşte aradığın şey
Derleyici, şablonun gerekli doğru sürümünü tahmin edemediği için hata verir. Belli ki ona söylemişVe her şey çalıştı.
Ve her şey çalıştı.
Neden ekstra karakterler?
Neden ekstra karakterler?
Derleyicinin şablonun tam olarak çalışan bir sürümünü tahmin etmediğini göstermek için.
Derleyicinin şablonun tam olarak çalışan bir sürümünü tahmin etmediğini göstermek için.
Ne için? ServiceDesk bunu kendi başına çözebilir
Niye ya?