در زبان ++C میتوان در قسمت function declaration به آرگومانهای ورودی تابع مقداری را نسبت داد که به آن default argument میگویند. در این حالت اگر هنگام فراخوانی این تابع به جای این آرگومانها چیزی به تابع ارسال نکنیم، مشکلی ایجاد نمیشود و این مقدار پیش فرض برای این آرگومانهای تابع در نظر گرفته میشود.
مثلاً تابع ساده زیر که به همراه declarationاش نوشته شده، را در نظر بگیرید:
std::string your_name_is(std::string name = "Anonymous"); std::string your_name_is(std::string name) { return "Your name is " + name; }
اگر مثلاً به جای فراخوانی این تابع به صورت
your_name_is("Ali");
آن را به این صورت فراخوانی کنیم:
your_name_is();
نتیجه در خروجی به صورت "Your name is Anonymous"
برگردانده خواهد شد.
استفاده از این ویژگی در جای مناسب خودش میتونه باعث بشه ما یک کد بهتر و تمیزتر بنویسیم. اما فقط چند نکته رو نباید فراموش کنیم:
- اگر در تعریف تابع چند آرگومان ورودی داشیتم، لازم نیست که برای همهی آنها Default Argument تعریف کنیم. اما اگر برای آرگومانی تعریف کردیم باید همهی آرگوماهای سمت راستش نیز دارای Default Argument باشد و گرنه هنگام کامپایل به خطا میخوریم.
/*Compile Error: You should assign default argument to 'd' too.*/ void test_function(int a, int b, int c = 0, int d);
- هنگام فراخوانی تابع ورودیهایی که به تابع پاس میدهیم از چپ به راست به آرگومانها نسبت داده میشوند. به مثال زیر دقت کنید تا بهتر متوجه شوید:
void test_function(int a, int b, int c = 0, int d = 0);
ما میتوانیم این تابع را به صورتهای زیر فراخوانی کنیم:
test_function(10, 20); /* a == 10, b == 20, c == 0, d == 0 */ test_function(10, 20, 30); /* a == 10, b == 20, c == 30, d == 0 */ test_function(10, 20, 30, 40); /* a == 10, b == 20, c == 30, d == 40 */