Параметры функции по умолчанию должны быть постоянными в C++?

JSON.stringify(collectionNames).includes(JSON.stringify(sourceNames)) ?  array.push(collection[i]) : null

Вот как я это сделал.

44
задан bdukes 3 December 2008 в 04:09
поделиться

2 ответа

Параметр по умолчанию может быть подмножеством полного набора выражений. Это должно быть связано во время компиляции и в месте объявления параметра по умолчанию. Это означает, что может быть вызов функции или вызов статического метода, и это может взять любое количество аргументов, насколько они - константы и/или глобальные переменные или статические переменные класса, но не членские атрибуты.

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

// Code 1: Valid and invalid default parameters
int global = 0;
int free_function( int x );

class Test
{
public:
   static int static_member_function();
   int member_function();

   // Valid default parameters
   void valid1( int x = free_function( 5 ) );
   void valid2( int x = free_function( global ) );
   void valid3( int x = free_function( static_int ) );
   void valid4( int x = static_member_function() );

   // Invalid default parameters
   void invalid1( int x = free_function( member_attribute ) ); 
   void invalid2( int x = member_function() );
private:
   int member_attribute;
   static int static_int;
};

int Test::static_int = 0;

// Code 2: Variable scope
int x = 5;
void f( int a );
void g( int a = f( x ) ); // x is bound to the previously defined x
void h()
{
   int x = 10; // shadows ::x
   g(); // g( 5 ) is called: even if local x values 10, global x is 5.
}
54
ответ дан v.shashenko 23 September 2019 в 11:47
поделиться

Они не должны быть! Параметр по умолчанию может быть любым выражением в рамках определенных ограничений. Это оценено каждый раз, когда функция вызвана.

12
ответ дан Felix Dombek 23 September 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: