2017-09-23 5 views
0

구성원 함수의 위임과 같은 항목을 많이 검색했지만 그것에 대해 뭔가를 찾지 못했습니다.구성원 대표 기능

class Foo1 { 
     int bar(int a, int b = 1, bool c = false); 
     int bar(int a, bool c); 
    } 

    // Can I write it like: 
    class Foo2 { 
     int bar(int a, int b = 1, bool c = false); 
     // This line is my question: 
     int bar(int a, bool c) : bar(a, 1, c); 
    } 

제 컴파일러는 생성자 초기화 목록을했다하지만 난 곳 위의 같은 것을 읽을 생각 : 어쩌면 내가

는 나는 다음과 같은 일을하려고 ... 잘못된 단어를 검색. 규칙에서 생성자 만 초기화 목록을 가져 오는 예외가 있습니까?

답변

0

init-list는 클래스 생성자에 대해 의미가있는 클래스 개체의 기본 및 멤버를 초기화하기위한 것입니다. 함수는 초기화 할 필요가 없습니다 (각 호출에서 전달 된 인수에서 자동으로 초기화되는 함수 매개 변수 제외).

그러나 한 함수를 다른 함수로 지연시키는 것은 쉽습니다. 첫 번째 함수의 본문에서 다른 함수를 호출하기 만하면됩니다.

class Foo2 { 
    int bar(int a, int b = 1, bool c = false); 
    int bar(int a, bool c) { return bar(a, 1, c); } 
}; 
+0

10 개 이상의 함수를 "위임 (delegate)"해야한다면 성능이 저하 될 수 있다고 생각했습니다. 필자는 컴파일러에게 실제 본문 함수를 호출하고 실제 본문을 호출하는 대신 실제 바 함수를 호출해야한다고 더 빨리 생각할 수 있다고 생각했습니다. 내가 잘못 생각 했니? –

+0

@HenrikViebrock 컴파일러가 최적화를 사용한다고 가정하면 컴파일러는 종종 함수 호출 오버 헤드를 제거하여 작은 함수를 "인라인"합니다. 또한, 생성자 mem-initializers는 실제로는 실제로 함수 호출입니다. – aschepler

+0

몰랐습니다. 감사! –

0

오류 메시지는 매우 분명합니다. 멤버 함수에서 위임을 할 수 없습니다.

당신이 같은 인수를 전달, 단순히 일부 회원 funcion에서 다른 멤버 함수를 호출되어 수행 할 수있는 성능 결점이 없어야 두 개의 매개 변수와 함께 술집에

class Foo1 { 
    int bar(int a, int b = 1, bool c = false); 
    int bar(int a, bool c); 
} 

// Can I write it like: 
class Foo2 { 
    int bar(int a, int b = 1, bool c = false); 

    // Should be inlined by default, but won't hurt to specify it explicitly 
    inline int bar(int a, bool c) { 
     return bar(a, 1, c); 
    } 
} 

호출.

+0

인라인 함수 내에 * return *을 써야하나요? –

+0

@HenrikViebrock 맞습니다. 제 잘못입니다. – Outshined