Ana Sayfa

C++26: Variadic Üç Nokta Parametrelerinde Değişim

1 dk okuma

C++26, dile küçük ama anlamlı bir temizlik getirerek, öncesinde virgül bulunmayan üç nokta (ellipsis) parametrelerini kullanımdan kaldırıyor. P3176R1 önerisiyle sunulan bu değişiklik, C uyumluluğunu artırmayı, kafa karışıklığını azaltmayı ve gelecekteki dil özelliklerine zemin hazırlamayı hedefliyor. Önerinin adı, İngilizcede listeleri netleştiren Oxford virgülüne eğlenceli bir gönderme yaparak, fonksiyon parametrelerinde üç noktanın önüne virgül konulmasını zorunlu kılıyor.

Sorun, C-stili variadic parametreler olan üç nokta parametrelerinin, C++11 ile gelen şablon parametre paketleriyle ... sözdizimini paylaşmasından kaynaklanıyor. C++'ta void foo(int...); gibi virgülsüz kullanıma izin verilirken, C standardı (C89'dan beri) her zaman int printf(char*, ...); şeklinde virgüllü kullanımı zorunlu kılmıştır. C++ daha sonra C uyumluluğu için virgüllü formu desteklemeye başlasa da, geriye dönük uyumluluk adına eski sözdizimini korudu. Bu durum, (int, ...)'nin her iki dille de uyumlu olmasına rağmen (int...)'nin sadece C++'ta çalışması gibi garip bir durum yarattı.

Asıl kafa karışıklığı, template<class Ts> void f(Ts...); gibi kullanımların birçok kullanıcı tarafından bir parametre paketi olarak algılanmasından kaynaklanıyor; oysa bu, Ts tipinde tek bir parametrenin ardından gelen bir üç nokta parametresidir. Gerçek bir parametre paketi için template<class... Ts> void f(Ts... args); yazılması gerekir. void g(auto args...); gibi kısaltılmış fonksiyon şablonları da benzer bir kafa karışıklığına yol açıyor. C++26, bu tür virgülsüz üç nokta parametrelerini kullanımdan kaldırarak, dilin daha tutarlı ve anlaşılır olmasını sağlayacak.

İçgörü

C++26'daki bu güncelleme, dilin variadic parametre tanımlamalarını standartlaştırarak C uyumluluğunu artırıyor ve geliştiriciler için daha net bir sözdizimi sunuyor.

Kaynak