C++ şablonları hakkında bir sorum var. Aşağıdaki kodlar segfaults.C++ şablonları içinde segfault
template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
Ancak & kaldırmak ve doğru olanı yapar.
template<typename T1, typename T2>
inline T1 const max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
Ayrıca, T1 ve T2 yerine T'yi kullanın ve gayet iyi çalışır.
template<typename T>
inline T const& max(T const &a, T const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4, 5) << std::endl;
}
Burada yanlış yapıyorum?
Lütfen kullandığınız sürüm numarası dahil olmak üzere derleyiciden bahset. Eğer GCC ise, -Wall' ile derlediniz mi? Tanımlanmamış davranışlara neden olan görmezden geleceğiniz konusunda bir uyarı olabilir. –
Derleyici, max() çağrısının geçici olarak başvurusunu döndürdüğünü bildirmelidir. – tristan
İlk iki kod parçacığı aynı mıdır? – asimes