2011-05-07 3 views
1

흐린 제목을 쓰고 죄송합니다. 누락 된 것으로 보입니다.건설에 대한 사용자 정의 지정에 대한 프리미티브

매우 기본적인 것처럼 보이기 때문에 나는 게시하기를 주저했지만 작동시키지 못합니다. 내 IDE는 다음과 같이 잘못되었다고합니다. 나는 긴 이중으로 교환 할 수있는 IRatio라는 클래스를 가지고 있습니다. 이제

class 
IRatio 
{ 
    protected: 
     long double 
     mValue; 

    public: 
     IRatio(); 

     IRatio(
      const IRatio& ir); 

     IRatio(
      const long double& ld); 

     IRatio& 
     operator=(
      const IRatio& ir); 

     IRatio& 
     operator=(
      const long double& ld); 

     operator long double() const; 
}; 

나는 다음과 같은 라인이 작동하는지 알고

IRatio n1(0.01f); 
IRatio n2; 
n2 = 0.02f; 

하지만, 내 완전한 깜짝로,이 라인이 작동하지 않습니다

IRatio n3 = 0.03f; 

가 어떻게이받을 수 있나요 작업? 복사 생성자가이 경우에 호출되었다고 가정 했습니까? 또는 대입 연산자 인 경우에도 상관 없습니다! 나는 std :: string이 그것을 할 수 있다는 것을 안다.

+1

정확히 어떻게 작동하지 않습니까? 컴파일러 오류 또는 잘못된 결과? –

+1

long double은 현재 C++ 표준의 일부가 아닙니다. 어떤 컴파일러를 사용하고 있습니까? –

+0

@unapersson, 당신과 당신의 의견을 upvoted 사람이 잘못되었습니다 :). –

답변

0

코드 이어야합니다. 즉, IRatio은 자체적으로 모든 리소스를 관리하지 않으므로 복사 생성자 및 할당 연산자가 필요하지 않습니다. 이 작업을 수행해야합니다 :

struct IRatio { 
    IRatio() : d(0L) { } 
    IRatio(long double d) : d(d) { } 
    operator long double() const { return d; } 
private: 
    long double d; 
}; 

int main(int argc, char* argv[]) 
{ 
    IRatio r = 0.02f; 
    return 0; 
} 
0

귀하의 코드가 작동해야

std::string s = "hello!"; 

감사합니다. 그러나 0.03ffloat입니다. long double라고 말하면서 0.03L라고 말하고 싶습니다. 그러나 여기서 반드시 문제가되는 것은 아닙니다. floatlong double로 변환 가능합니다.

예, 매개 변수 const long double&와 생성자는 n3에 복사 할 임시 IRatio 객체를 생성하는 데 사용된다 (그리고 여기에 복사 생성자 호출을 볼 수없는 가능성이 귀하의 컴파일러는하지 않는 한, 복사를 최적화해야

최적화하지 말라고 말한 것입니다.)

관련 문제