C++ Function Default Argument

2 minute read
  • C dilinde olmayan C++, Java, C#, Python gibi dillerde bulunan bir mekanizma.

  • C dilinde bir fonksiyonun kaç parametresi varsa o kadar argüman gönderilmesi gerekir. Variadic Function hariç tutuyoruz.

  • Böyle bir mekanizmanın olması client tarafından birçok fonksiyonun aynı değerlerle çağırılmasıdır. Parametre sayısı fazla olan fonksiyonlarda bu mekanizma daha fazla işe yarıyor. Programcının işini kolaylaştırıyor.

  • Default parametre mekanizması run time maliyeti getiren bir mekanizma değildir

 1#include <iostream>
 2
 3void func(int x = 10, int y = 20, int z = 30);
 4
 5void func(int x, int y, int z)
 6{
 7    std::cout << "x -> " << x << std::endl;
 8    std::cout << "y -> " << y << std::endl;
 9    std::cout << "z -> " << z << std::endl;
10    std::cout << "****************************" << std::endl;
11
12}
13
14int main() {
15
16    func();
17    func(1);
18    func(1, 2);
19    func(1, 2, 3);
20
21    return 0;
22}
23
24/*
25    x -> 10
26    y -> 20
27    z -> 30
28    ****************************
29    x -> 1
30    y -> 20
31    z -> 30
32    ****************************
33    x -> 1
34    y -> 2
35    z -> 30
36    ****************************
37    x -> 1
38    y -> 2
39    z -> 3
40    ****************************
41 */
  • Varsayılan argüman konusunda yapılmaması gereken birkaç davranış var. Bunlar direk sentaks hatası oluyor zaten.

  • Fonksiyonun bir parametresi varsayılan argüman alıyorsa bundan sonra gelecek tüm parametreler varsayılan argüman almak zorunda. Yani sağ taraftaki tüm argümanlar.

  • Fonksiyon bildiriminde varsayılan değerler verildikten sonra fonksiyon tanımı yapılırken tekrardan değer verilmemelidir. Eğer fonksiyon bildirimi yok ise tanımlama da verilebilir.