클래스의 비정수 정적 상수와 해당 컴파일 실패
C에서 비정수 정적 상수 멤버를 정의하려고 시도 클래스 내에서 double과 같은 유형을 사용하면 컴파일 오류가 발생할 수 있습니다. 이 컨텍스트에서는 정수 유형(예: int, unsigned)이 허용되므로 이 동작은 혼란스러워 보일 수 있습니다.
이러한 불일치의 이유는 컴파일러가 상수를 처리하는 방식에 있습니다. 정수 계열 형식의 경우 컴파일러는 일반적으로 상수가 사용될 때마다 상수를 인라인하므로 메모리 위치가 필요하지 않습니다. 그러나 double과 같은 비정수 상수에는 일반적으로 런타임 시 메모리 주소가 필요합니다.
비정수 유형의 정적 const 멤버가 올바르게 정의되었는지 확인하려면 헤더에서 이를 선언하는 것이 좋습니다. 파일을 만들고 별도의 소스 파일에 정의합니다. 이렇게 하면 정의가 단일 번역 단위로 나타나므로 다중 정의가 방지됩니다.
컴파일러는 -O1 in g 와 같은 더 높은 최적화 수준에서 비정수 상수를 최적화할 수 있지만 상수를 별도로 선언하고 정의하는 것은 여전히 크로스 플랫폼 호환성을 위한 가장 이식성이 뛰어난 접근 방식입니다.
위 내용은 C의 클래스에서 비적분 정적 상수를 정의할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!