를 할당? 내가 신경 써야 할까? 감사합니다.경고 할 때 동적으로 내가 처음으로 동적 할당을 사용하고 있는데 컴파일러는 나에게 내가 다른 곳에서는 찾을 수 없습니다이 경고를 준다 메모리
2
A
답변
5
문제 :
그것은 동적 할당과는 아무 상관이 없습니다.
당신은 아마 C++ (11)의 일부 데이터 멤버 초기화에 대해이 방법 중 하나를 사용하는:
class S
{
int n; // non-static data member
int& r; // non-static data member of reference type
int a[10] = {1, 2}; // non-static data member with initializer (C++11)
std::string s, *ps; // two non-static data members
struct NestedS {
std::string s;
} d5, *d6; // two non-static data members of nested type
char bit : 2; // two-bit bitfield
};
컴파일러는이 기능을 사용하고 있음을 알려줍니다 (비 정적 데이터 멤버 이니셜 라이저)는 C++ 11 이상에서만 존재합니다.
- 당신은 단순히
-std=c++11
플래그를 사용하여 코드를 컴파일 할 수 있습니다문제를 해결.
- 또는 C++ 11 컴파일러를 사용할 수없는 시스템을 타겟팅하는 것과 같은 이유로 일부 표준 (예 : C++ 98)을 사용하려는 경우이 기능을 사용하지 않아도됩니다.
내가 신경 써야할까요?
물론 그렇습니다. 경고에주의를 기울이지 않으면 오버플로 및 정의되지 않은 동작과 같은 많은 문제가 발생할 수 있습니다.
+0
-std = C++ 11 플래그에 대해 아무 것도 몰라, 나는 그것을 defenetely 사용할 것이다! 고맙습니다! –
3
항상 경고에주의하십시오! 경고는 유용합니다. 실제로는 항상 -Werror
으로 컴파일해야합니다.
당신이 사전 C++ 11에서 컴파일 있음을 경고하고 있지만, 코드에서 C++ 11 수준의 이니셜 라이저를 사용 :
struct foo {
int i = 0; // initialization of non-static POD
};
당신은 -std=c++11
컴파일해야합니다 해당 기능의 사용을 중지하고 생성자에서 데이터 멤버를 초기화합니다.
경고 외에도이 문제를 일으키는 코드를 게시해야합니다. –
"-std = C++ 11"의 어느 부분이 불분명합니까? –
예, 경고에주의해야합니다. 컴파일 명령에 맹목적으로 플래그를 추가하여 경고가 사라지게하기 전에 컴파일러에서 경고하는 문제의 성격을 이해해야합니다. –