가능한 중복은 :
std::string x(x);왜 생성중인 개체에서 전달되는 복사 생성자를 호출 할 수 있습니까? (C++) (GCC)
class A {};
int main() {
A a(a);
}
이 컴파일합니다.
GCC (GCC) 4.7.2 20120921 (4.7.2-2 레드햇)
g++ -o main main.cpp -Wall -w -ansi
나는 더 경고를받을 수 없습니다.
왜 이것이 유효한 C++로 보이는가?
표준 어디서나 언급 되었습니까?
gcc에서이를 신고 할 수있는 경고 플래그가 있습니까?
클래스에 구성원 데이터가 있으면 데이터가 임의로 끝납니다.
예 :
#include <iostream>
class A {
public:
int i;
A() : i{6} {}
};
int main() {
A a(a);
std::cout << a.i << '\n';
}
출력 : 여기 -482728464
을 무슨 일이야? 또한 실수로이 작업을 수행하지 못하게하려면 어떻게해야합니까? - 컴파일러 오류가 될 수 있습니까?
더 간단한 예제 인 'int i = i;'에 유의하십시오. – GManNickG
Clang 3.2는 최근 이러한 사례를 탐지하는 알고리즘을 검토 한 결과 [uninitialized.cpp] (http://llvm.org/svn/llvm-project/cfe/trunk/test/SemaCXX/uninitialized.cpp) 파일을 확인할 수 있습니다. 테스트 스위트에서 경고하는 모든 사례를 볼 수 있습니다. gcc의 경우 * 초기화되지 않은 * 경고는 잠재적으로 최적화 수준에 연결되며 'O1' 또는'O2' 빌드에 대해서만 트리거 될 수 있습니다. –