class A { ... } class B { ... private: A a; }
위와 같이 클래스 A, B가 있습니다. B는 클래스 A를 멤버로 가집니다.
B의 생성자를 만들려고 합니다만.. 아래의 2개의 생성자는 완전 동일한 역할을 하는 코드인지 궁금합니다. 1번 생성자
B() : a() {}
2번 생성자
B() {}
동일합니다.
위에것은 B 객체를 생성시에 멤버 값을 바로 초기화 하는것이구요. 아래것은 B 객체를 생성한 후에 초기화 메소드를 수행하며 멤버에 값을 대입하는 개념입니다.
자바의 경우와 비추어 보면
위에것은
class A { public int a = 5; }
와 같이 선언과 동시에 초기화 하는것과 같구요.
아래것은
class A { public A() { a = 5; } }
와 같은경우가 되겠죠..
첫번째 경우가 아주 조금 더 빠릅니다. 그래서 초기화때 저런식으로 많이들 합니다.
첫째 분이 달아 주신 대로 동일합니다.
-- There's nothing so practical as a good theory. - Kurt Lewin[
-- There's nothing so practical as a good theory. - Kurt Lewin "하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/
의미상으로는 동일한것 같은데 어셈블리코드를 보면 알 수 있을것 같네요.
--------------------- Weird, huh?
http://janbyul.com
의미적으로 동일해도 다른 기계 코드를 반환하기도 합니다.
- CN의 낙서장 / HanIRC:#CN
- 죠커's blog / HanIRC:#CN
각각의 과정은 차례가 틀리지만 컴파일러의 최적화기능으로 경우에 따라 같은 코드를 만들기도 한다고 알고 있습니다. 하지만 특히 포인터형이 아닌 객체를 멤버로 가질때 인자를 넣어 초기화를 해야 하는경우엔 반드시 첫번째 방식으로 해야 합니다.
class T { T2 t2; T() : t2("args") {} };
자바로 치면 다음과 같은 코드와 같겠지요.
public class T { public T2 t2 = new T2("args"); public T() {} }
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
동일합니다.
동일합니다.
위에것은 B 객체를
위에것은 B 객체를 생성시에 멤버 값을 바로 초기화 하는것이구요.
아래것은 B 객체를 생성한 후에 초기화 메소드를 수행하며 멤버에 값을 대입하는 개념입니다.
자바의 경우와 비추어 보면
위에것은
와 같이 선언과 동시에 초기화 하는것과 같구요.
아래것은
와 같은경우가 되겠죠..
첫번째 경우가 아주 조금 더 빠릅니다. 그래서 초기화때 저런식으로 많이들 합니다.
아닙니다 아무 차이 없습니다
첫째 분이 달아 주신 대로 동일합니다.
--
There's nothing so practical as a good theory.
- Kurt Lewin[
--
There's nothing so practical as a good theory. - Kurt Lewin
"하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/
의미상으로는
의미상으로는 동일한것 같은데
어셈블리코드를 보면 알 수 있을것 같네요.
---------------------
Weird, huh?
http://janbyul.com
의미적으로 동일해도
의미적으로 동일해도 다른 기계 코드를 반환하기도 합니다.
- CN의 낙서장 / HanIRC:#CN
- 죠커's blog / HanIRC:#CN
각각의 과정은
각각의 과정은 차례가 틀리지만 컴파일러의 최적화기능으로 경우에 따라 같은 코드를 만들기도 한다고 알고 있습니다.
하지만 특히 포인터형이 아닌 객체를 멤버로 가질때 인자를 넣어 초기화를 해야 하는경우엔 반드시 첫번째 방식으로 해야 합니다.
자바로 치면 다음과 같은 코드와 같겠지요.
댓글 달기