2015-04-08 4 views
4

Я хочу создать функцию с необязательным аргументом, принимающим значение другого аргумента. В объявлении функции следующий не работает, но это именно то, что я хочу сделать:необязательное значение аргумента

void function(int a, int b=a) //error 

Я пытаюсь установить значение по умолчанию переменной Ь до величины а. Каков самый чистый способ сделать это? Можем ли мы это сделать, не меняя подписи функции?

+1

Это определение или декларация (прототип или реализация)? –

+0

Можете ли вы создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и показать нам? –

ответ

10

Написать дополнительную функцию, которая принимает только один аргумент и вызывает исходную функцию:

inline void function(int a) 
{ 
    function(a, a); 
} 
+0

Возможно, вы можете объяснить, почему исходный код в OP был ошибочным. – Walter

+0

@Walter: не глядя в стандарт, я предполагаю, что значение аргумента по умолчанию должно быть константой времени компиляции. –

+0

@Walter Просто параметры функции не могут использоваться в качестве аргументов по умолчанию. – 0x499602D2

1

По умолчанию аргумент должен быть global variable или global constant, даже function. Но это не может быть local variable, потому что local var не может обеспечить в сборке.

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