2010-12-18 2 views

답변

3

항상 매개 변수 선언으로 표시되는 경우를 제외하고 C++ (및 C)의 함수 선언입니다.이 경우 함수 포인터가 선언됩니다.

역 비록 언급 할 수 없습니다

인가 "T var에;" 항상 C++의 객체 선언? Tvar가 그것을 이와 같이, 파라미터 선언으로 표시하는 경우를 제외하고, 함수로서 선언 될 경우, 함수 타입이 될 수 있기 때문에

아니는 아니다.

+0

'T var (1);'은 어떨까요? – lex

+0

죄송합니다, 귀하의 업데이 트가 내 코멘트에 대한 답변을하지 못했습니까? – lex

+0

@lex : 괄호가 비어 있지 않으면 분명히 무엇이 들어 있는지에 따라 다릅니다. '1'은 매개 변수 선언과 같지 않지만 T 생성자의 int 인수와 같습니다. –

0

“T var();”은 항상 C++의 함수 선언입니까?

컨텍스트에 따라 다릅니다.

컨텍스트 1

template<typename T> 
void func() 
{ 
    T var(); // function declaration 
} 

컨텍스트 2 func 복귀 공극 함수에 대한 포인터를 리턴 T 인수로 얻어 이때

template<typename T> 
void func(T var()) // equivalent to `template<typename T> void func (T()) { } ` 
{ 
} 

. var을 생략하면 선택 사항입니다.


무엇 T var(1)에 대한;, 인스턴스를 또는 그것을 T var = T(1)과 동일하다;

T var(1)T var = T(1)는 복사 초기화 인 반면 직접 초기화된다. 두 경우 모두 var 개체는 T (1)로 초기화됩니다.

T이 사용자 정의 유형 인 경우 후자의 경우에는 액세스 가능 복사 생성자가 필요하지만 전자는 복사하지 않습니다.

+0

'T var (1);'은 인스턴스화인가,'T var = T (1);'와 같은가요? – lex

+0

@lex : 수정 사항을 확인하십시오. –

+0

그렇다면'T var()'을 직접 초기화로 간주 할 수없는 이유는 무엇입니까? – lex