在C ++中必须使用默认的函数参数吗?

void some_func(int param = get_default_param_value()); 

默认参数可以是整组expression式的一个子集。 它必须在编译时和默认参数声明的地方进行绑定。 这意味着它可以是一个函数调用或一个静态方法调用,只要它们是常量和/或全局variables或静态类variables,而不是成员属性,它可以接受任意数量的参数。

它在编译时和声明函数的地方绑定的事实也意味着,如果它使用了一个variables,那么即使在函数调用的地方有一个不同的variables影响了原来的variables也会被使用。

 // 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. } 

他们不一定非要! 默认参数可以是某些限制内的任何expression式。 每次调用函数时都会对其进行评估。