2014-12-15 2 views
28

main()->int과 같이 함수를 작성할 때 항상 새로운 C++ 11 후행 반환 형식 규칙을 강력하게 옹호하는 오버플로 사용자가 일부 스택  에 있습니다. 표기법을 균일하게 만들면서 이점을 볼 수 있습니다. 함수 포인터를 선언 할 때, 나는 뒤에 반환 양식을 사용하여 어떤 방법을 찾을 수 없습니다, 즉 하나후행 형식의 함수 포인터 사용

typedef int(*fp)(int);

또는 함수 포인터에 대한

using fp = int(*)(int);

int을 복용 선언 할 수 있습니다 int을 반환합니다.

그런 함수 포인터를 선언 할 때 새로운 후행 구문을 사용하는 방법이 있습니까?

using fp = (*)(int)->int;

그러나 이것은 컴파일되지 않습니다 같은 예를 들어, 뭔가. 그렇지 않은 경우 새로운 구문을 함수 포인터에 적용 할 수없는 이유가 있습니까?

답변

25

당신은 반환 형식 구문을 사용하면 반환 형식은 다음을 나타 내기 위해 함수 이름 앞에 auto를 넣어 의미 후행 auto

using fp = auto (*)(int) -> int; 
typedef auto (*fp)(int) -> int; // alternatively 

사용해야합니다 (또는 C++ (14)의 경우, 추론한다). 함수 포인터의 경우, 동일한 규칙이 적용됩니다 (명백한 이유로).

이뿐만 아니라하지만 기능에 대한 사실, 당신의 예제

main() -> int {... } 

가 유효하지 않습니다 중 하나는 using 선언 또는 typedef 사용 여부 이전 auto

+0

감사합니다. 이유는 무엇 때문에 후행 형식의 함수에서'auto'가 필요하다는 것을 잊어 버렸습니다. 말이된다. – vsoftco

+0

그냥 알아 냈어 :) 고마워. 대답은 5 초 더 빠르네. – vsoftco

13

당신은에 따라 이들 중 하나를 원하는없이 :

using fp = auto (*)(int)->int; 
typedef auto (*gp)(int) -> int; 
+0

고마워, 웬일인지 '자동'에 대한 필요성을 잊어 버렸어. – vsoftco