2016-10-28 6 views
1

제목, 메타 링크가 좋지 않습니다. 하지만 저와 함께 : 왜 참조 유형 자체가 const로 선언 될 수 없는지 알고 있습니다 - 컴파일 시간에 완전히 평가 가능해야합니다. 따라서 참조 유형의 상수에 가능한 값은 string 및 null 참조입니다.DateTime const의 선언이 컴파일러 오류를 발생 시키지만 선택적 매개 변수를 제공하지 않는 이유는 무엇입니까?

따라서 const DateTime x = some date은 유효하지 않습니다. 하지만 그 논리에 따라, 예를 들어 DateTime d1 = default(DateTime)을 선택적 매개 변수로 전달할 수 없어야합니다. 예를 들어 const DateTime d1 = default(DateTime)을 선언 할 수없는 것처럼 옵션 매개 변수는 컴파일시의 상수이어야하므로? 이것은 항상 내가 가진 태도 "meh. just about it"에 관한 것이 었습니다. 그러나 나는 호기심이 생겼습니다.

컴파일 타임 상수는 컴파일 타임 상수가 아닙니까? 에서와 같이 상수는 상수입니까? 물론

, 그냥뿐만 아니라 날짜 시간이 const가 허용되지 않고는 default(DateTime) 또는 null 기준으로 잘 컴파일 한 것 때문에 내 IDE가 (비주얼 스튜디오)은 단지 오류를 제공하는 것이 될 수 있을까요?

답변

1

optional parameters에 msdn 기사를보십시오. 데이터 유형이 값 형식 (열거 형, 구조체)는 빈 생성자를 선택적 매개 변수를 시작할 수 있습니다을 때 :

static void Foo(string s, DateTime opt = new DateTime()) 

또는 기본 키워드

. 참조 유형에는 해당되지 않습니다.

+0

분명히 질문은 명확하지 않았습니다. 내가 묻는 것은 (컴파일 타임 상수가 컴파일 타임 상수가 아닌가? 상수는 상수입니까?))는 _why_ 예를 들어'default (DateTime)'는 선택적 매개 변수 (컴파일 타임 상수 여야 함)로 허용되지만 컴파일 타임 상수 ('const')는 선언 할 수 없습니다. 둘 다 컴파일 타임 상수이고, 내 마음 속에 선택적 매개 변수 (컴파일 타임 상수)와 const에서 차이가 없어야합니다. 그러나 하나는 오류를 제기하고 다른 하나는 오류를 제기하지 않기 때문에 분명히 있습니다. –

+1

참조 유형이 포함될 때 선택 매개 변수는 컴파일 시간 제약 ** ** 일 수 있어야합니다. 'default (DateTime)'은 컴파일 시간 상수가 아니므로 const 변수를 초기화 할 수는 없지만'DateTime'은 값 유형이므로 빈 생성자 또는 기본 키워드를 사용하여 선택적 매개 변수를 시작할 수 있습니다. –

+0

아, 그것은 VS입니다. 'foo'의 기본 매개 변수 값은 컴파일 타임 상수 여야합니다. 이것이 혼란스럽고 MSDN 기사가 왜 더 명확하지 않게 된 이유입니까? 선택적 매개 변수가 컴파일 타임 상수가 아닌 것을 알지 못했습니다. 더 많이 알수록! 감사! –