임시객체 함수 인자로 사용

vani2의 이미지

임시객체를 함수 인자로 사용할때 다음과 같이 레퍼런스로 전달해도 문제 없나요??

말그대로 임시객체라 다음줄로 넘어가면 소멸될 것 같은데 잘되네요..

void C(const Temp& t);

void C2(const Temp t);

C(Temp());
C2(Temp());

둘다 잘 돌아가지만 문제는 없을지..?

추가-

복사 생성자의 프로토타입은 const 객체를 받던데 const 객체가 아니여도 되나요?
...
Temp(const Temp& t);//복사생성자
...

Temp temp();
Temp temp2= temp;//const객체가 아님

shint의 이미지

이렇게 풀어서 사용하는것이 보기 좋습니다.

fn(sizeof(DATA)); 이런것을

int size = sizeof(DATA);
fn( size ); 이렇게 말이죠.

제 경험으로는 프로그램 개발중에 const를 사용해본 적이 없습니다. ㅡ_ㅡ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

@plusb :

>> 임시객체를 함수 인자로 사용할때 다음과 같이 레퍼런스로 전달해도 문제 없나요??

네 문제 없습니다.
어떤 함수에 레퍼런스로 전달된 임시 객체는 함수 호출이 끝날 때까지 살아있습니다.

>> 복사 생성자의 프로토타입은 const 객체를 받던데 const 객체가 아니여도 되나요?

네 가능합니다. 하지만 그래야할 이유가 없습니다.
항상 const 객체를 받도록 작성하는 것이 좋습니다.

@shint :

>> 제 경험으로는 프로그램 개발중에 const를 사용해본 적이 없습니다.

매우 잘못된 습관입니다.
c++의 가장 큰 강점 중 하나가 const 입니다.
가능한 한 많은 곳에 const를 사용하는 것이 좋습니다.

vani2의 이미지

명쾌한 설명 감사드립니다.

덕분에 잘 이해가 되었습니다.

아참, 그리고 두번째 질문에 문제 설명이 부족했던것 같아서 다시 올립니다..

제 질문의 의의를 다시 설명드리자면

const객체의 '매개변수'에 const객체가 아닌 일반 객체'인자'를 넣었을 경우 자동으로 const객체가 되는지 알고 싶습니다.
그런데 이 경우 const객체인데 어떻게 복사 생성을 할 수 있는지 궁금하군요..

임시객체에 대한 문서가 별로 없어서 해맸는데 해결했네요!

klara의 이미지

const 객체의 '어떤 함수의 매개 변수'로 일반 객체를 넣었다는 것인지 모르겠으나, const 객체라면 const 키워드가 달린 멤버함수만 호출이 가능합니다.

vani2의 이미지

그렇다면 같은타입의 const 객체에 const가 붙지않은 같은 타입의 객체를 대입할 수 있나요? 혹은 반대의 경우도 가능한가요?

익명 사용자의 이미지

답을 해드리고 싶지만... 직접 해보세요. 어려운 일도 아니데요.
그래야 머리에 남습니다. 해보고 이해가 안되는 사항을 질문하세요.

vani2의 이미지

그게.. 된다는건 알고있지만, const객체가 매개변수인데 const객체가 아닌 객체를 인자로 받는 것에 대해 원리가 궁금합니다.

klara의 이미지

지금 뭔가 용어를 혼동하고 계신듯합니다.
const int a = 1;
이건 대입이 아닙니다. 초기화입니다.

klara의 이미지

const 객체에 대해서는 const가 붙은 함수만 호출 할 수 있다고 하였습니다.
대입은 대입 연산자라는 함수를 호출하는 구문입니다.
대입 연산자에 const가 붙어있나 안붙어있나 찾아보시고, 붙어 있을수 있나 없나 생각도해보세요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.