맨 위의 int 초기화 두 예제는 C++ 컴파일러에 의해 컴파일되면 같은 원시적인 어셈블리어 코드로 번역(translation)됩니다. 따라서 두 초기화 방법에 다른 시간적 (오버헤드) 차이는 없습니다. 아마도 클래스나 기본(primitive) 타입에 대해서 초기화 방법의 직관적인 표현의 차이일 뿐입니다.
사람을 위한 이해도를 위해 다르게 사용할 뿐이라는 거지요.
C언어부터 (그 이전 언어부터) 이해를 하고 있던 분이라면 첫 번째 표현이 더 직관적입니다.
하지만 object-oriented 프로그래밍부터 시작한 분에게는 오히려 두 번째 표현이 더 직관적일 겁니다.
클래스의 경우
클래스의 경우 명확히 초기 생성자를 호출한다는 점에서는 아래 것이 더 직관적일 수 있는 것 같습니다.
http://home.lacovnk.net/
제가 알기로는
제가 알기로는 성능의 문제로 알고 있습니다.
1번의 경우 하나의 int 파라메터를 받는 생성자를 통해서 a가 생성되고,
2번의 경우 하나의 int 파라메터를 받는 생성자를 통해서 임시객체가 생성되고,
b의 복사생성자를 통해서 b로 넘어가는 것으로 알고 있습니다.
따라서 2번의 경우가 성능이 더 나쁜것으로 알고 있습니다.
틀린 부분이 있으면 지적해 주시면 감사하겠습니다...
흠... ktd님... 제가
흠... ktd님... 제가 알기론 2번이 명시적 초기화법으로 알고 있는데요 -_-
아닌지 헷갈;; -_-
어쨌든 대부분의 컴파일러에서는 저 부분을 그냥 초기화로 처리해줍니다.
명시적 초기화로 표준 정의된 것이든, 컴파일러 수준의 최적화든...
그리고
SomeClass some_class=some_value;
이것은 SomeClass some_class(some_value);와 같습니다.
물론 explicit 제한이 있으면 안되지만요.
마지막으로 SomeClass some_class(~~~,~~~,~~~); 이런 식으로 여러 인자를 받을 수 있다는 점이 다릅니다.
제가 아는 한 두
제가 아는 한 두 문장은 동일한 초기화를 수행합니다. 두 초기화 문장 모두 정수형을 입력으로 받는 생성자를 직접 호출합니다. 성능의 차이는 없을거라 생각합니다.
재욱님 말씀이
재욱님 말씀이 맞습니다.
맨 위의 int 초기화 두 예제는 C++ 컴파일러에 의해 컴파일되면 같은 원시적인 어셈블리어 코드로 번역(translation)됩니다. 따라서 두 초기화 방법에 다른 시간적 (오버헤드) 차이는 없습니다. 아마도 클래스나 기본(primitive) 타입에 대해서 초기화 방법의 직관적인 표현의 차이일 뿐입니다.
사람을 위한 이해도를 위해 다르게 사용할 뿐이라는 거지요.
C언어부터 (그 이전 언어부터) 이해를 하고 있던 분이라면 첫 번째 표현이 더 직관적입니다.
하지만 object-oriented 프로그래밍부터 시작한 분에게는 오히려 두 번째 표현이 더 직관적일 겁니다.
댓글 달기