wrapper x(2);
x += -2;
:이 작업을 수행하는 경우,
class wrapper
{
private:
lib_type data;
public:
wrapper()
{
lib_set_ui(this->data, 0UL);
}
wrapper (const wrapper &input)
{
lib_set(this->data, input.data);
}
wrapper (const long input)
{
lib_set_si(this->data, input);
}
wrapper (const unsigned long input)
{
lib_set_ui(this->data, input);
}
wrapper &operator+= (const wrapper &input)
{
lib_add(this->data, input.data);
return *this;
}
wrapper &operator+= (const unsigned long input)
{
lib_add_ui(this->data, input);
return *this;
}
};
불행하게도 : 정말 필요가 없습니다 개체는이 같은 뭔가 결국 16,
컴파일러이 경우에, 그래서 ...
을 (GCC/VS2010)는 심지어 내가 암시 적으로 int
unsigned long
에 캐스팅하기 위해 노력하고있어 경고를 발행하지 않습니다, 그리고 내가 얻고 싶은 것을 확실히 아니다 , 내가 어떻게 wrapper
클래스에 대한 연산자를 오버로드 할 것이므로 필요하지 않을 때 임시 wrapper
개체를 만들 필요가 없습니까? 나는 wrapper &operator+= (const unsigned long input)
과부하를 제거 할 경우, 나는이 같은 것을 사용하는 것 :
wrapper x(2);
x += wrapper(-2);
x += -2;//implicitly casts -2 to wrapper
하지만 난 컴파일러가 추가 개체를 최적화 할 수있을지도 모른다는 사실에 의존 할 수 있다고 생각하지 않습니다 ..
나는 둘 다 사용하여'const long' parametred-version을 호출한다고 가정합니다. 계속해서 전환이 없을 수도 있습니다. –
@EsaLakaniemi 나는 당신이 무슨 뜻인지 이해할 수 없다. –
오, 이제 나는 이것을 올바르게 읽었다. 편집 : 오, 하나님 그냥 대답 질문을 멈추어야한다 나는 대답과 의견을 섞어 해요 –