다음 코드 고려 : C++에서일반적인 산술 변환 - 더 나은 규칙 집합입니까?
void f(byte x) {print("byte");}
void f(short x) {print("short");}
void f(int x) {print("int");}
void main() {
byte b1, b2;
short s1, s2;
f(b1 + b2); // byte + byte = int
f(s1 + s2); // short + short = int
}
는, C 번호는, D, 및 Java는 모두 기능은 "INT"과부하로 결의를 호출 ... 이미 인식이있다 "사양에서"를, 그런데 왜 이런 식으로 언어가 설계 되었습니까? 나는 더 깊은 이유를 찾고있다.
byte + byte --> byte
sbyte + sbyte --> sbyte
byte + sbyte --> short
short + short --> short
ushort + ushort --> ushort
short + ushort --> int
// etc...
이 불편 코드 등 short s3 = (short)(s1 + s2)
을 제거하는 것처럼, 상기 결과는 예를 들어, 두 피연산자의 모든 가능한 값을 나타낼 수 작은 종류로 나에게
, 그것은 의미가 있습니다 IMO가 훨씬 더 직관적이고 이해하기 쉽습니다.
C의 요즘 남긴 유산인가요? 아니면 현재의 행동에 대한 더 나은 이유가 있습니까?
"void main()"이있는 프로그램은 C 및 C++ 표준에 의해 정의되지 않았으므로 그 프로그램에 대해 불평 할 이유가 없습니다. 표준화 된 비헤이비어를 논의하려면 "int main()"을 사용하십시오. –
C 및 C++ 외에 다른 언어를 언급했습니다. 그것을 단지 의사 코드로 생각하면됩니다. 약간의 변경 (예 : void, int to char, byte to char, printf 등으로 변경)과 같은 모든 C 언어로 컴파일되고 설명 된 동작을 나타냅니다. 물론 수정되지 않은 소스 파일이 언급 된 모든 언어로 컴파일 될 것이라고 기대하지 않았습니까? – zildjohn01