C++ 새로운 변수 초기화 문법

gurumong의 이미지

책에 C++의 새로운 초기화 문법 이라고 설명하고있는데
이런 초기화 방법을 많이 사용하고있는가요?

int wrens=432; //전통적인 C 스타일 초기화문법
int wrens(432); //C++의 새로운 초기화 문법

전통적인 C 스타일 초기화 문법이 좀더 직관적인것 같은데
C++의 새로운 초기화 문법이 갖는 장점이 무엇인가요?

lacovnk의 이미지

클래스의 경우 명확히 초기 생성자를 호출한다는 점에서는 아래 것이 더 직관적일 수 있는 것 같습니다.

http://home.lacovnk.net/

ktd2004의 이미지

제가 알기로는 성능의 문제로 알고 있습니다.

CTest a(3);              // 1번
CTest b = CTest(3); // 2번

1번의 경우 하나의 int 파라메터를 받는 생성자를 통해서 a가 생성되고,
2번의 경우 하나의 int 파라메터를 받는 생성자를 통해서 임시객체가 생성되고,
b의 복사생성자를 통해서 b로 넘어가는 것으로 알고 있습니다.

따라서 2번의 경우가 성능이 더 나쁜것으로 알고 있습니다.
틀린 부분이 있으면 지적해 주시면 감사하겠습니다...

IDNed의 이미지

흠... ktd님... 제가 알기론 2번이 명시적 초기화법으로 알고 있는데요 -_-
아닌지 헷갈;; -_-

어쨌든 대부분의 컴파일러에서는 저 부분을 그냥 초기화로 처리해줍니다.
명시적 초기화로 표준 정의된 것이든, 컴파일러 수준의 최적화든...

그리고
SomeClass some_class=some_value;
이것은 SomeClass some_class(some_value);와 같습니다.
물론 explicit 제한이 있으면 안되지만요.

마지막으로 SomeClass some_class(~~~,~~~,~~~); 이런 식으로 여러 인자를 받을 수 있다는 점이 다릅니다.

JaeWook Choi의 이미지

제가 아는 한 두 문장은 동일한 초기화를 수행합니다. 두 초기화 문장 모두 정수형을 입력으로 받는 생성자를 직접 호출합니다. 성능의 차이는 없을거라 생각합니다.

caplove의 이미지

재욱님 말씀이 맞습니다.

맨 위의 int 초기화 두 예제는 C++ 컴파일러에 의해 컴파일되면 같은 원시적인 어셈블리어 코드로 번역(translation)됩니다. 따라서 두 초기화 방법에 다른 시간적 (오버헤드) 차이는 없습니다. 아마도 클래스나 기본(primitive) 타입에 대해서 초기화 방법의 직관적인 표현의 차이일 뿐입니다.

사람을 위한 이해도를 위해 다르게 사용할 뿐이라는 거지요.

C언어부터 (그 이전 언어부터) 이해를 하고 있던 분이라면 첫 번째 표현이 더 직관적입니다.

하지만 object-oriented 프로그래밍부터 시작한 분에게는 오히려 두 번째 표현이 더 직관적일 겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.