부울 변수 bool abc;
을 클래스에 선언했으며 기본적으로 false가 될 것이라고 생각했습니다. 내 프로그램 if (abc)
의 if 조건이 true로 밝혀 졌기 때문에 abc의 값을 출력하고 값 55가 포함 된 것을 보았습니다. 정상입니까? 그것이 틀리다는 것을 확인하기 위해 항상 'bool abc = false'를 지정해야합니까?부울 변수는 기본적으로 항상 false가 아닙니까?
답변
예, 항상 변수를 초기화해야합니다. 그것이 분명하고 그렇게 할 필요가없는 시대를 친밀하게 배우기 전까지는 무엇이든 항상 그렇게해야합니다. 그리고 그때까지 ... 음 ... 왜 좋은 습관을 그만 두겠습니까? 두 번에 대한 기본 내장 데이터 유형 (부울, 문자, wchar_t를, 짧은, INT, 긴, 플로트를 이야기
struct X
{
bool b;
X() : b() {}
};
나는 명시적인 부울 리터럴을 false로 추가하고 싶습니다. (내게는 읽기 쉽습니다 (기술적으로는 당신과 다르지는 않습니다)). –
:
는 그것을 구성 기본값으로 충분한입니다 false로 부울을 초기화하려면 , long double), C++ 표준에 따르면 전역 변수는 명시 적으로 초기화되지 않은 경우 기본값이 0으로 설정됩니다 ().로컬 변수의 경우 컴파일러가 할당 된 메모리의 내용을 정리할 필요가 없습니다. 로컬 변수는 명시 적으로 초기화되지 않은 경우 임의의 값을 포함합니다.
기술적으로 '정적 저장 기간'의 변수입니다. 전역 변수는이 유형의 변수의 구성원입니다. –
예. bool x=false
또는 bool x(false)
중 하나를 수행해야합니다. 초기화되지 않은 프리미티브는 ANY 값을 가질 수 있습니다.
또는'bool x = bool();'도 사용할 수 있습니다. –
를 볼 수 있음. 항상 변수를 사용하기 전에 초기화하십시오. 비록 언어가 그들이 특정한 가치를 지니고 있다고 보장하더라도. 당신이 스스로를 강요 할 수 없다면, 불평 할 컴파일러를 얻은 다음 스스로 그렇게하십시오. :)
그러나 은 실제로 초기화 할 의미가없는 경우 값을 초기화하지 않습니다. 이 같은 루프가있는 경우 예를 들어, (나는이 그냥 예입니다, 좋은 코드입니다 말하는 게 아니에요) : 내가했던 것처럼
int i = 0;
while ((i = getNum()) == 5)
{
}
제로로
i
를 초기화하지 마십시오. 그것은 말이 안되며, 컴파일러를 셧다운하는 동안 잊어 버리고 코드가 엉망이 될 가능성이있다. 올바른 시간에만 초기화하도록 강요 할 수 있다면 더 이상은 아니지만 덜 복잡하지 않을 수도 있습니다. 그러면
wrong code will look wrong even at just a glance부터 디버깅을 훨씬 쉽게 할 수 있습니다.
한 줄로 : 컴파일러가 불평하지 않도록 초기화하지 말고 항상 사용하기 전에 초기화하십시오.
기본적으로 전역 변수에만 0 (거짓)이 할당되며 모든 로컬 변수에는 부울 변수에서 true로 평가되는 0이 아닌 가비지 값이 지정됩니다.
- 1. 부울 변수는 항상 false
- 2. 부울 변수는
- 3. Java 생성자는 기본적으로 public이 아닙니까?
- 4. 세션 변수는 기본적으로 쿠키에 저장됩니까?
- 5. enum의 변수는 항상 초기화됩니까?
- 6. 기본적으로 부울 false를 선택하는 DropDownListFor (...)
- 7. Phusion Passenger 레일로 항상 NonBlocking이 아닙니까?
- 8. 왜이 루프 변수는 항상 0입니까?
- 9. IMultiValueConverter의 매개 변수는 항상 동일합니까?
- 10. Java에서 모든 암호 스위트가 기본적으로 활성화되어있는 것은 아닙니까?
- 11. quickCheck에서 False가 False가 아니라고 말하고있는 것 같습니다.
- 12. django 템플릿 부울 변수는 0으로 표시되지만 true로 간주됩니다. 왜?
- 13. PHP 함수 매개 변수는 항상 Wordpress에서 null입니다.
- 14. 기호 위치 또는 크기 편집이 항상 정확한 것은 아닙니까?
- 15. 인터페이스 변수는 기본적으로 최종적이고 정적이며 메서드는 public 및 abstract입니다.
- 16. 기본적으로
- 17. Java에서 두 개의 부울 변수
- 18. Nhibernate iesicollection contains에 false가 반환됩니다.
- 19. 위 부울 낮은 부울
- 20. Delphi : TAdoTable.Insert는 삽입 도구가 아닙니까?
- 21. JSON 스타일 객체의 매개 변수는 항상 따옴표로 묶어야합니까? 예를 들어
- 22. 부분을 렌더링하려고 할 때 로컬 변수는 항상 nil입니다.
- 23. MS UpdatePanels는 AJAX가 아닙니까?
- 24. BigInteger 또는 BigInteger가 아닙니까?
- 25. 양식이 통제가 아닙니까?
- 26. pthread_wrlock_xxlock 스핀 잠금이 아닙니까?
- 27. 보기가 스키마 바운드가 아닙니까?
- 28. .bmp는 Windows 비트 맵이 아닙니까?
- 29. Java에서 내 부울 테스트가 항상 실패하는 이유는 무엇입니까?
- 30. 왜 false가 validates_presence_of를 무효화합니까? 이 문제를 재현하는
이유 : http://stackoverflow.com/questions/1910832/c-why-arent-pointers-initialized-with-null-by-default/1910992#1910992 –
[초기화되지 않은 변수를 읽는 것은 UB .] (http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991#4259991) 그냥하지 마십시오. – GManNickG
이 상황에서 나타날 수있는 '재미있는'버그는 b 및! b 모두 true로 평가됩니다. –