웹서핑을 하다가 알게된 사실로 C++ (학생 시절 공부 포함)프로그래밍한지 15년이 넘었는데 이런 사실을 처음 알았네요.

(그런데 왠지 알고나니 왠지 당연하다라는 생각도 되네요....^^;)

 

함수의 인자 값을 디폴트 값을 줄 수 있는 것은 모두 알고 있을 것입니다.

void TEST_1(int nValue = 5 )

{

std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}

 

그런데 TEST_1 nValue의 디폴트 값을 동적으로 줄 수도 있습니다. 정확하게는 nValue의 값을 상수가 아닌 함수로 정의할 수 있습니다. 바로 아래와 같이

int GetNumber()

{

           return (int)time(NULL);

}

 

void TEST_2(int nValue = GetNumber() )

{

           std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}

 

그리고 한술 더 떠서 복수의 식으로 구성할 수도 있습니다.

int g_nValue = 0;

void TEST_3( int nValue = (

                                          g_nValue = GetNumber(),

                                          g_nValue+1) )

{

           std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}

 

이게 어떻게 쓰일지는 모르겠지만 왠지 어딘가에 요긴하게 사용될 것 같네요^^


#include <iostream>

#include <time.h>


void TEST_1(int nValue = 5 )

{

std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}


int GetNumber()

{

return (int)time(NULL);

}


void TEST_2(int nValue = GetNumber() )

{

std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}


int g_nValue = 0;

void TEST_3( int nValue = ( 

g_nValue = GetNumber(),

g_nValue+1) )

{

std::cout << __FUNCTION__ << ". " << nValue << std::endl;

}


int main()

{

TEST_1();


TEST_2();


_sleep(1000);

TEST_2();


TEST_3();


return 0;

}




출처 : http://d.hatena.ne.jp/kabakiyo/20120911/1347369131



 

 

 

 

저작자 표시
신고
by 흥배 2013.02.25 08:00