2010-04-20 3 views
3
void execute(int &x,int y=100) 
{ 
x=x+y; 
cout<<x<<endl; 
} 
void main() 
{ 
int a=5,b=6; 
execute(b); 
} 

будет работать следующая программа, не присваивая значение по умолчанию для x (формальные параметры в прототипе функции).function function

+0

Я думаю, что ваш пример был разрезан в процессе публикации. – Jay

ответ

4

Да, это сработает. Не назначая значение по умолчанию x, вы вынуждаете вызывающего передать значение в качестве параметра. Когда вы делаете execute(b) в главном, вы связываете ссылку x с фактическим параметром 'b', и поскольку вы не передали какое-либо значение переменной 'y', будет использоваться значение по умолчанию.

3

Во-первых, в C++ нет такой функции, как «прототип функции». «Прототип» - это термин из языка C, который не имеет значимого приложения на C++. Здесь у вас есть объявление функции, которое также является определением функции.

Во-вторых, похоже, вы спрашиваете, требуется ли указывать аргументы по умолчанию для всех аргументов функции в C++, правильно? Если это так, ответ - нет, нет требования указывать аргументы по умолчанию для всех аргументов функции.

В-третьих, это должно быть int main, а не void main.

+0

Стандарт C++ (п. 3.3.3) определяет «область прототипа функции», область действия, которая «завершается в конце ближайшего объявляющего функции декларатора». Я бы назвал это «содержательным приложением». Есть и другие рекомендации, кроме этого. –

0

Я думаю, вы смущены относительно того, как работает функция. Вы передаете значение x в него (ну, ссылка на int не фактическое значение), так что ... да, это работает.

Предоставляя значение по умолчанию для y (int y=100), вы делаете это так, чтобы функцию можно было вызывать, не передавая второй аргумент. Если вызывается с одним аргументом, у будет присвоено значение 100.

int a=5,b=6; 
execute(b); 

Попав выполнить(), начальное значение х равно 6, а у 100.

1

Вы бежите execute(b), смысл что execute будет работать b = b + 100 (y - 100, так как вы его не передали, и оно получило значение по умолчанию), распечатать 106 и b будет изменен в main, так как он берется ссылкой.

Смежные вопросы