기본 클래스에 operator->
의 두 버전 (const에 과부하 됨)이 있다고 가정합니다. 내가 파생 클래스에서 선언 및 const 오버로드 사용
using Base::operator->;
을 말한다면, 나는 두 버전 아니면 그냥 const가 아닌 하나의 액세스를받을 수 있습니까?
기본 클래스에 operator->
의 두 버전 (const에 과부하 됨)이 있다고 가정합니다. 내가 파생 클래스에서 선언 및 const 오버로드 사용
using Base::operator->;
을 말한다면, 나는 두 버전 아니면 그냥 const가 아닌 하나의 액세스를받을 수 있습니까?
같은 사업 그것의 전부 또는 아무것도 선언을 사용 (7.3.3)는 이름이 아닌 회원을 가지고 .
는 ISO/IEC 14882 (2003), 7.3.3. 1/A 사용 선언이 사용 선언이 나타나는 선언적 영역에 이름을 소개한다. 즉, 이름은 이름 동의어 인 다른 곳에서 선언 된 일부 법인의 경우
7.3.3을 읽기를 권장합니다. 내부에는 미묘한 부분이 있습니다. 당신은 템플릿을 선언 할 수없고, 모든 멤버는 당신이 사용하는 이름을 참조 할 수 있어야합니다. 선언은 접근 가능해야합니다. 사용 선언문이 발견 된 블록의 이름과 함께 과부하 해결을위한 이름이 고려됩니다 (즉, 아무것도 숨기지 않습니다.) 등등.
부모의 이름이 같은 메소드/연산자의 모든 버전에 액세스 할 수 있습니다.
둘 다. 너 시도 했니? (빌어 먹을이 대답이 짧은 :. 잘 아, 여기 예입니다.
#include <iostream>
#include <string>
struct bar
{
void foo() { std::cout << "non_c:foo()" << std::endl; }
void foo() const { std::cout << "c:foo()" << std::endl; }
};
class base
{
public:
bar* operator->() { return &b; }
bar const* operator->() const { return &b; }
private:
bar b;
};
class derived : public base
{
public:
using base::operator->;
};
int main(void)
{
const derived d = derived();
derived e;
d->foo();
e->foo();
}
나는 특정 컴파일러로 무언가를 시도함으로써 언어의 의미를 배우기를 거부한다. – fredoverflow
@Fred, 사실이지만 순수한 호기심? 단순히 표준을 읽지 않는 이유는 무엇입니까? – Nim
@ 님 : 당신이 무언가를 알고 싶을 때마다 전체 표준을 읽는 것은 모든 것을 암기하는 것처럼 조금 비현실적입니다. 그래서 실제 인덱스보다 더 잘 작동합니다 ;-) –