다음 코드는 C++에서 유효합니까?함수의 이름이없는 매개 변수가 기본값을 가질 수 있습니까?
void f(void* = 0)
{}
int main()
{
f();
}
이 사용법이 합법적이라고 말하는 C++ 표준 페이지는 무엇입니까?
다음 코드는 C++에서 유효합니까?함수의 이름이없는 매개 변수가 기본값을 가질 수 있습니까?
void f(void* = 0)
{}
int main()
{
f();
}
이 사용법이 합법적이라고 말하는 C++ 표준 페이지는 무엇입니까?
예, 유효합니다.
이러한 조합을 허용하는 표준 문구가 특별히 없습니다. 단지 에도 허용되지 않습니다. 초기화 절가 변수 선언이 이니셜 절에 지정된 경우
... 및 함수 파라미터 명명 될 수
[C++11: 8.3.6/1]:
가은 :기본 인자 구문은 변수 선언의 파라미터를 작동 적용 기본 인수로 사용됩니다. 기본 인수는 후행 인수가없는 호출에서 사용됩니다. 변수 선언에
[C++11: 8.3.5/11]:
[...] 확인 시험 인터넷 ER은 임의로이 파라미터 이름으로 제공 될 수있다. [...]
있다 (예하지 규범 텍스트지라도, 그래서 구체적 것을 증명하기 위해 사용될 수 없다) 8.3.6/4 미만이 사용조차 일례이다.
예, 완벽하게 합법적입니다.
[예 :
void point(int = 3, int = 4);
은 0, 1, 2 개의 인수로 호출 될 수있는 함수를 선언 선언 명백한 예 N3485에 8.3.6 기본 인수/4 발견 int 형이다.
예, 유효합니다.
8.3.5/1 절에있는 함수 매개 변수에 대해 주어진 구문 생성은 식별자없이 매개 변수 선언을 허용하지만 할당 표현식 (이니셜 라이저로)을 사용합니다.
합법적 일뿐만 아니라 코딩 스타일에 따라 실제로 유용 할 수 있습니다.
기본 매개 변수는 함수 선언에서만 의미가 있습니다.
명명 된 매개 변수는 함수 정의에서만 의미가 있습니다.
f.시간 :
void f(void*=nullptr);
f.cc 그것이 그러나, 나는 인위적인 어떤 상황에서 알아낼 수 없습니다
void f(void* x)
{
...
}
_ "명명 된 매개 변수는 함수 정의에서만 의미가있다."_ lolwut .. 당신이 여기서 말하려고하는 것을 이해하지만 다소 우스꽝 스럽습니다. –
이러한 기능을 실제로 사용을 가질 수 ... –
@MatteoItalia'enable_if' 천하게. – Pubby
@MatteoItalia : SFINAE –