c++ 초보 질문입니다.

trymp의 이미지


C++ 초보적인 질문입니다. -,.-

const bool operator() (AA1 a1 ,AA2 a2)
{
//....
}
 
 
bool operator() const (AA1 a1 ,AA2 a2)
{
//....
}

위의 두함수가 const 위치가 다른데요

동일한 함수인가요? 차이가 있는 것인가요?

답변 주시면 감사하겠습니다.

shint의 이미지


const는 변경자 라고 합니다.
constant 가 상수 입니다.

이런 방식으로 사용하기도 합니다.
-----------------------------------------------------------------
변경자 데이터형 기능( 인자값 ) 변경자 오버로딩. 오버라이딩. 상속;
-----------------------------------------------------------------

Synapse india complain sharing info on chapter 8 operator overloading
http://www.slideshare.net/SynapseindiaComplaints/synapse-india-complain-sharing-info-on-chapter-8-operator-overloading

using cxx::types
http://www.slideshare.net/delongj/using-cxxtypes

QCPColorGradient Class Reference
http://www.qcustomplot.com/documentation/classQCPColorGradient.html

operator const char* () const의 의미를 모르겟습니다.
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=205400686&qb=b3BlcmF0b3IgY29uc3Q=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0

double CBlobTest::operator()(const CBlob &blob) const
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=142870929&qb=b3BlcmF0b3IgY29uc3Q=&enc=utf8&section=kin&rank=2&search_sort=0&spq=0

C++ operator 쓸 때 반환형으로 const &를 왜 붙이는 지 궁금합니다. 내공 有
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=67823620&qb=b3BlcmF0b3IgY29uc3Q=&enc=utf8&section=kin&rank=3&search_sort=0&spq=0

:: 변수(Variable), 상수(const), 연산자(Operator) ::
http://blog.naver.com/tppsc/60013936874

http://cafe.naver.com/boolnim/5473

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

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

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

HDNua의 이미지

const bool operator() (...)은 const bool 형식으로 값을 반환하는 함수이고,
bool operator() (...)은 bool 형식으로 값을 반환하는 함수입니다.

bool operator() const (...)은 여전히 bool 형식으로 값을 반환하지만 함수 내부에서 객체의 값을 수정할 수 없습니다.
const bool operator() const (...)은 const bool 형식으로 값을 반환하지만 함수 내부에서 객체의 값을 수정할 수 없습니다.

저는 이렇게 생각했습니다.

philnet의 이미지

다음 코드를 참고하세요.

// test.cpp
class A
{
public:
    void ConstFunc() const {} // 상수 멤버함수
    void NonConstFunc() {}    // 비상수 멤버함수
 
    const bool operator() (int input) { // 상수를 반환하는, 비상수 멤버함수
        return input > 0;
    }
 
    bool operator() () const { // 비상수를 반환하는, 상수 멤버함수
        ConstFunc(); // OK
        NonConstFunc(); // compile error
        return true;
    }
};
 
int main()
{
    A a;
    int i1 = a(10);
    int i2 = a(10)++; // error
}
 
$ g++ test.cpp
test.cpp: In member function ‘bool A::operator()() const’:
test.cpp:15:22: error: passing ‘const A’ as ‘this’ argument of ‘void A::NonConstFunc()’ discards qualifiers [-fpermissive]
test.cpp: In function ‘int main()’:
test.cpp:24:19: error: lvalue required as increment operand
test.cpp:28:18: error: passing ‘const A’ as ‘this’ argument of ‘void A::NonConstFunc()’ discards qualifiers [-fpermissive]

(1) line 24 에서는 "const bool operator() (int)" 함수의 "상수 반환값"을 변경(증가)시키려 했기 때문에 에러가 발생합니다.

(2-1) line 15 에서는 const 로 선언된, "bool operator() () const" 함수가, const 가 아닌 NonConst() 함수를 호출했기 때문에 컴파일 에러가 발생합니다. 어떤 멤버함수가 const 로 선언(함수 제일 뒤에 const 수식어가 있는 경우)되었을 때에는, 해당 함수는 const 함수들만 호출할 수 있기 때문입니다.

(2-2) line 28 에서는 "const A" 로 선언된 ca, 즉 상수 인스턴스에 대해, const 가 아닌 NonConst() 함수를 호출했기 때문에 컴파일 에러가 발생합니다. 상숙 객체에 대해서는, 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.