2011-09-19 6 views
7

GoogleTechTalks video on Youtube에서 Bjarne Stroustrup은 곧 나오는 C++ 0x 표준에 대해 말합니다.C++ 'explicit'키워드를 사용하는이 예제가 맞습니까?

#include <iostream> 

struct Sick 
{ 
    Sick(double d)  { std::cout << d << "\n"; } 
    explicit Sick(int i) { std::cout << i << "\n"; } 
}; 


int main() 
{ 
    Sick s1 = 2.1; 
    Sick s2(2.1); 
} 

그가 특정 상황에서 암시 적 변환과 관련된 문제를 강조하기 위해, Sick(double)보다는 Sick(int) 전에 explicit 키워드를 배치 할 찾으 셨나요 비디오에서 그는 다음의 예를 언급? 그의 논의에서

+3

YouTube 동영상에있는 누군가가 무엇을 의미하는지 어떻게 알 수 있습니까? 중요한 것은이 예제에서'explicit'의 사용을 이해한다는 것입니다. –

+2

예제와 함께 보여줄 내용에 따라 어느 쪽이든 적당 할 것입니다. – Flexo

+3

@Kerrek SB, 당신은 그가 의미하는 바를 의사 소통하려고하기 때문에 그가 의미하는 바를 알고 있다고 가정합니다. – ikegami

답변

9

은 스트로브 스트 룹은 explicit 생성자가있는 경우 직접 초기화,

Sick s2(2.1); 

같은

은 생성자가 explicit을 표시 고려할 것이라고 언급하고있다. 그것은 여러 컴파일러 (GCC 4.6.1 및 MSVC 16/VS 2010 포함)에 대한 내 경험이 아니며 표준에서 그러한 요구 사항을 찾을 수 없습니다 (누군가가 지적 할 수 있으면 관심이 있지만).

#include <iostream> 

struct Sick 
{ 
    Sick(double d)  { std::cout << "double " << d << "\n"; } 
    explicit Sick(int i) { std::cout << "int " << i << "\n"; } 
}; 


int main() 
{ 
    Sick s1 = 2; 
    Sick s2(2); 
} 

을 위의 뜻을 표시 실행 :

double 2 
int 2 

을 그 두 가지를 표시하는 int가 초기화에 사용하는 경우

그러나, 나는 예 스트로브 스트 룹은 입증하기 위해 무엇을 의미하는지 보여줄 것이라고 생각 명백히 동등한 초기화는 실제로 다른 생성자를 선택합니다.

(또는 질문에 언급 된 Truncheon과 내가 놓친 것 - explicit 키워드는 Sick(double d) 생성자에 있어야 함).

관련 문제