C++을 지원한다고 주장하는 플랫폼에서 개발자와 이야기하고 있었지만 같은 숨소리로 프로그램 종료시 정리되는 정적 변수의 수가 매직 넘버에 묶여있다. (나는 그들이 플랫폼에서 32라고 말했다) 그들은 C++ 표준을 따르고 있다고 말한다.정적 변수의 수가 C++에서 제한되어 있습니까
이 정보가 맞습니까?
C++을 지원한다고 주장하는 플랫폼에서 개발자와 이야기하고 있었지만 같은 숨소리로 프로그램 종료시 정리되는 정적 변수의 수가 매직 넘버에 묶여있다. (나는 그들이 플랫폼에서 32라고 말했다) 그들은 C++ 표준을 따르고 있다고 말한다.정적 변수의 수가 C++에서 제한되어 있습니까
이 정보가 맞습니까?
표준에서는 모든 소멸자 이 부작용이있을 경우을 호출해야한다고 규정하고 있습니다. 초기화 된 개체
[basic.start.term]/1:
소멸자 (12.4) 기간 메인로부터 성병 호출의 결과로서 리턴 결과로 불리는 정적 스토리지 (즉, 시작 그 수명 (3.8) 개체) :: 출구 (18.5). [...]
[basic.stc.static]/2:
정적 저장소 기간이있는 변수에 초기화 또는 부작용이있는 소멸자가있는 경우 사용하지 않는 것처럼 보이더라도 이 제거되지 않아야합니다. 단, 클래스 개체 또는 해당 개체의 복사/이동 12.8에 명시된대로 을 제거 할 수 있습니다. static 키워드는 정적 저장 기간이있는 로컬 변수를 선언하는 데 사용할 수 있습니다. 이 구현 한계에 올 때
그러나, 표준 준수에 관한 규칙 일부 여유를 허용 않습니다
[intro.compilance]/2.1:
프로그램이이 규격의 규칙의 위반 사례가 없으면, 순응 구현하여야한다 , 리소스 제한 내에, 허용하고 올바르게 해당 프로그램을 실행하십시오.
허용되는 정적 변수의 수에 대한 제한은 이상하게 보일 수 있지만 일반적인 구현에는 모든 종류의 항목에 엄격한 제한이 있습니다. 템플릿 인스턴스화 깊이
프로그램 종료시 정적 변수를 지우는 데 제한이있는 경우 C++ 언어 표준에서 반드시 지켜야하는 것은 아닙니다.
그러나 플랫폼, 컴파일러 및 런타임 라이브러리에 따라 약간의 CPU 기능 및/또는 엄격한 메모리 제약이있는 임베디드 플랫폼에 제한이있을 수 있습니다.
하지만 표준에 맞지 않습니다. 당신에게 맞을 경우 – user1235183
표준은 구현에있어 약간의 자유를 허용합니다. 준수하고 다른 규칙을 위반하지는 않습니다. 참조 용 TartanLlama 답변을 참조하십시오. – roalz
"표준은 소멸자가있는 정적 변수의 수에 대한 제한을 요구하지 않지만 그러한 제한을 허용합니다 *. –
전혀 맞지 않습니다. – selbie
컴파일러가 최소한 이것에 대해 경고하기를 바랍니다 – MikeMB
구현에는 항상 제한 사항이 있습니다. 예를 들어 템플릿 재귀의 깊이, 식별자의 길이 또는 디버깅 할 수있는 번역 단위의 최대 줄 수 (예 : Solaris는 오랜 기간 동안 65536)입니다. –