开发者

How to change default arguments in c++ [closed]

开发者 https://www.devze.com 2023-01-29 15:34 出处:网络
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or r开发者_如何学运维hetorical andcannot be reasonably answered in its current for
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or r开发者_如何学运维hetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 12 years ago.

I know there an answer in following page,but i can't open it in my country... so, someone kind enough to copy and paste it here. Thanks in advance

http://cpptruths.blogspot.com/2005/07/changing-c-function-default-arguments.html


Copy of http://cpptruths.blogspot.com/2005/07/changing-c-function-default-arguments.html

In C++, default arguments of global scope functions can be changed easily.

Typically we use a constant expression as a default argument. C++ supports static variables as well as a constant expression for a default argument. We can also redeclare a function signature in a new scope with a different default value.

Default arguments are implemented as global static variables. Therefore, same effect can be achieved if we assign a differnt value to the static varibale. Following code shows this interesting feature.


#include
#include
#include

static int para=200;

void g(int x=para); // default argument is a static variable.
void f(int x=7); // default argument implemented in terms of some static varible.

int main(void)
{
void f(int x=70); // redeclaring function ::f

f(); // prints f70

g(); // prints g200
para=500;
g(); // prints g500

{
void f(int x=700); // redeclaring function f
f(); // prints f700
::g(); // prints g500
}

::f(); // prints f7 !!!!
// Note that earlier f() call in the same scope gave us f70!!
// This shows that :: (scope resolution operator) forces compiler to
// use global declaration with global signature's default value.

{
void g(int x=100); // redeclaring function g
g(); // prints g100!!!
std::cout << "para = " << para << std::endl; // prints para = 500
// Note that though value of para is unchaged local scope
// changes value of default argument.
}
::g(); // prints g500
return 0;
}

void f(int x)
{
std::cout << "f" << x << std::endl;
}

void g(int x)
{
std::cout << "g" << x << std::endl;
}

As a programming guideline, if you need to change the value of default argument, either by redelcaring the function signature or reassignment of static variable, you better not make it a default argument and keep it a simple argument.


The gist of it:

1) Set up a static, non-const variable.

2) Set the argument to default to that variable's value.

3) Change the variable's value.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号