2009-11-05 4 views
3

C# 언어 (및 다른 언어들)에는 숫자 리터럴 끝에 접미사가 필요합니다. 이 접미어는 리터럴 유형을 나타냅니다. 예를 들어 5m은 십진수이고 5f은 부동 소수점 숫자입니다.번호 접미사가 필요한 이유는 무엇입니까?

내 질문은 :이 접미어가 정말로 필요한가요? 또는 컨텍스트에서 리터럴 유형을 추론 할 수 있습니까?

예를 들어 코드 decimal d = 5.05.0이 2 중 10 진수가 아니라는 것을 유추해야합니다. 그런 문법 때문에 문제가 발생합니까? 같은 간단한 경우에 괜찮

답변

8

:

float f = 7; 

하지만이 같은 진술에 대해 걱정할 필요가 없습니다 있도록 명시 적으로 훨씬 낫다는 :

float f = (double)(int)(1/3 + 6e22/(double)7); 

네, 그건 알고 고안된 예이지만 은 왼쪽에있는 유형에서 코더의 의도를 알지 못합니다. 변수에 전혀 지정되지 않은 경우 특히 (예 : 변수에 인수로 전달되는 경우) int, float, double, decimal 등 중 하나를 취할 수있는 오버로드 된 함수).

9

일반적으로 유형에 대한 정보가 "in"이 아닌 "out"으로 흐르도록 언어를 설계하려고합니다. 즉, 표현식의 유형은 먼저 각 하위 표현식을 분석하여 결정된 다음 해당 표현식이 해당 표현식과 일치하는지 확인합니다. 일반적으로 다른 방식으로 진행하지 않으며, 상황에 따라 하위 표현식을 추론합니다. 타입 정보가 람다 표현식 에서처럼 두 가지 방법으로 흐를 수있는 경우 매우 어려운 상황에 빠질 수 있습니다.

지금, 당신이 언급 특정 상황에서, 우리는는 "정밀 또는 m 접미사를 필요로하지 않는 크기의 손실없이 진수로 변환 할 수있는 부동 소수점 리터럴"그냥 문자를 말한다 규칙을 작성했습니다 수 short에 들어 맞는 int는 자동으로 변환됩니다. 그러나 "m"을 추가하기는 쉽지만 일부 리터럴이 자동으로 변환되고 다른 유형은 일관성이 없으면 혼동스러워서 코드를 이해하기 쉬워지고 더 많은 자체 문서화가 가능합니다.

관련 문제