2013-07-12 4 views
1

C++에서 클래스에 대한 연산자 할당을 정의 할 때 * this를 반환하지 않아도됩니다. Visual Studio 2012, Visual Studio 2010에서 경고 수준 4로 테스트했는데 오류나 경고가 없었으며 코드가 예상대로 작동했습니다. 그러나 Visual Studio 2008에서는 '연산자 = 값을 반환해야합니다'라는 컴파일 타임 오류가 발생했습니다.C++ 대입 연산자 기본 반환

내 질문은 이것이다는 : 떨어져 핵심 C++ 언어의 '기능'또는 그것은 VS 팀에 추가하기로 결정 뭔가

이이 요청 된 경우 내가 사과 않거나 정보가에있다. 이 온라인, 나는 어떤 대답을 찾을 수 없습니다.

singleton<float> sf; 
sf.value = 1.9f; 
singleton<float> sf2 = sf; 
std::cout << sf2.value << std::endl; 
+0

예제가 있습니까? – 0x499602D2

+1

반환 값으로 '싱글 톤'을 사용하지만 아무것도 반환하지 않습니다. – Rapptz

+0

@Rapptz 경고 수준 4에서도 VS2012에서 합법적 인 것 같습니다 – user2574802

답변

2

예를 들어, 귀하의 문제는 singleton&을 반환하는 함수에서 발생하지만 아무 것도 반환하지 않습니다 (즉,). 표준은 이것을 정의되지 않은 동작으로 간주합니다. 함수의 단부가 더 값 리턴 동등 O를 FF로 흐르는

섹션 6.6.3.2

; 이것은 값 반환 함수에서 뜻밖의 결과를 낳습니다.

+0

감사합니다. 나는 경고/오류를받지 못했다는 것이 이상하다고 생각한 것을 이해합니다. – user2574802

+0

AFAIK, 대입 연산자는 아무것도 반환하지 않아도된다는 것에 주목할 가치가 있습니다. 'void '메소드가 될 수 있습니다. 그러나 이렇게하면 'a = b = c = d;'와 같은 사용법이 비활성화됩니다. – yzt

0

그것은이없는 리턴 값을 가지고 비 무효를 반환하는 함수에 대한 정의되지 않은 동작입니다 :

template <typename T> 
struct singleton 
{ 
T value; 

singleton(const singleton& x) : value(x.value) {} 
singleton() {} 
~singleton() {} 
singleton& operator=(const singleton& x) { value = x.value; } 
}; 

내가 테스트에 사용 된 코드이다. 허용 될 수도 있지만 표준 준수를 의미하지는 않습니다.

+0

고마워, 나는 미니멀리스트 코드가 좋을 것이라고 생각했고, 표준이 이것에 대해 말한 것을 확인하고 싶었다. – user2574802

관련 문제