C++ C+;中的默认函数参数必须为常量+;?

C++ C+;中的默认函数参数必须为常量+;?,c++,C++,他们不必如此!默认参数可以是某些限制范围内的任何表达式。每次调用函数时都会对其求值。默认参数可以是整个表达式集的子集。它必须在编译时和默认参数声明处绑定。这意味着它可以是函数调用或静态方法调用,并且可以接受任意数量的参数,只要它们是常量和/或全局变量或静态类变量,而不是成员属性 它在编译时和声明函数的地方被绑定,这一事实也意味着,如果它使用了一个变量,那么即使不同的变量在函数调用的地方隐藏了原始变量,也会使用该变量 void some_func(int param = get_default_p

他们不必如此!默认参数可以是某些限制范围内的任何表达式。每次调用函数时都会对其求值。

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

它在编译时和声明函数的地方被绑定,这一事实也意味着,如果它使用了一个变量,那么即使不同的变量在函数调用的地方隐藏了原始变量,也会使用该变量

void some_func(int param = get_default_param_value());

David Rodríguez-dribeas
answear很棒,但没有提供解决方案。
看起来似乎没有解决办法

解决方案非常简单:使用函数/方法重载重新设置默认参数

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

我不知道你可以引用全局变量。在和上有很好的资源。它也可以是通过函数指针的调用,即如果foo(intarg=(*fp)();这里,在声明foo的范围中查找fp,但是每次调用foo()时都会计算*fp。底线应该是g(f(5))而不是g(5),但我无法更正,因为编辑太小。
void some_func(int param);
void some_func() {
    some_func(get_default_param_value());
}