Microsoft MVP성태의 닷넷 이야기
3항 연산자에 ref 지원? [링크 복사], [링크+제목 복사],
조회: 14167
글쓴 사람
영귤
홈페이지
첨부 파일
 


안녕하세요.

크게 중요한 질문은 아니지만 그래도 한 번 질문을 드려봅니다.

ref int result = ref (part1 != 0) ? ref part1 : ref part2;

에서,

ref int result, ref part1, ref part2 는 이해가 가는데,

중간의 조건식에 불과한 (part1 != 0) 에도 ref 가 붙어있는 것은

ref (part1 != 0) ?

그냥 문법이니까 그렇다고 암기하고 넘어갈 수 있었습니다.

그런데 아래줄의

"흔히 사용할 일은 없겠지만 ref 의 특성을 이해하고 있다면 다음의 코드도 가능하다." 에서
(알아두면 요긴하게 사용할 곳이 많을 것 같습니다^^)

((part1 != 0) ? ref part1 : ref part2) = 15;

에서 조건식 부분에 ref 가 빠져버린 것은 뭔가 문법의 일관성이 사라진 느낌이 듭니다.
ref 를 넣으니까 컴파일 에러까지 발생을 합니다.

이것도 그냥 문법으로 암기하면 되는 것인지,
아니면 논리적으로나 일관성으로나 옳은 구문인데,
제가 ref 를 잘못 이해하고 있는 것인지 궁금합니다.










[최초 등록일: ]
[최종 수정일: 9/12/2020]


비밀번호

댓글 작성자
 



2020-09-12 04시09분
일단 조건식에 붙는 ref는 조건 식을 위한 것이 아니고 전체 3항 연산자를 위한 것입니다.

   ref int result = ref (part1 != 0) ? ref part1 : ref part2;
== ref int result = ref ((part1 != 0) ? ref part1 : ref part2);
!= ref int result = (ref (part1 != 0)) ? ref part1 : ref part2; // 컴파일 오류:

구문을 파싱하는 측면에서 보면, 우측 ref 내의 (...)의 괄호를 하나의 [ref_exp]라고 가정했을 때 기존 ref 사용 구문과 동일합니다.

ref int a = ref b;
ref int a = ref ([ref_exp]);

그리고, 두 번째의 경우도 동일하게 바라볼 수 있습니다. 즉, 아래의 구문은 원래도 허용되지 않았습니다.

ref int a = 5; // 컴파일 오류 CS8172
ref ([ref_exp]) = 15; // 컴파일 오류 CS8172

반면 이렇게는 가능합니다.

int a = 15;
([ref_exp]) = 15; // 컴파일 성공

(제 개인적으로도 메서드 인자에서의 ref 구문을 제외하고는 좀 헷갈리기는 합니다. ^^;)
정성태

... 46  47  48  49  50  51  52  53  54  55  56  57  [58]  59  60  ...
NoWriterDateCnt.TitleFile(s)
1212조광훈2/13/201416157ISAPI 필터에서 커스텀 헤더 정보 추가 [1]파일 다운로드1
1211조광훈2/12/201420209isapi 필터 로드 오류 [2]
1208박지호2/9/201424255[오타] 시작하세요 C# 프로그래밍 p.267 ~ 350 [1]
1207임동찬2/5/201418437Web페이지에서 .net application 실행시키는 방법 [3]
1206신지환2/3/201419800visual sourcesafe(internet) 체크인 에러 [1]
1205박지호2/2/201422138[오타] 시작하세요 C# 프로그래밍 p.199 ~ 202 [1]
1204김태훈1/27/201433128Windows Service 오류 문의입니다. [2]
1203박지호1/26/201423795[오타] 시작하세요 C# 프로그래밍 p.131, 157, 180 [1]
1202이창주1/24/201425478[질문] Windows Error Reporting [8]
1201김나리1/21/201418397[시작하세요 C# 프로그래밍] 비동기 호출 [1]
1200박지호1/19/201423479[오타] 시작하세요 C# 프로그래밍 p.76 [1]
1199윤종현1/9/201419085p654 의 비동기 관련 설명 [3]
1198초이1/4/201418810웹서비스 WSDL 생성및 프록시 클래스 생성 관련 질문입니다. [1]
1196박현수1/2/201417534[WCF] Client 호출 방법 [2]
1195박현수12/23/201317485[WCF] 클라이언트의 호출실패(IIS이용) [4]파일 다운로드1
1191박주만12/18/201324497C++ Dll 에서 C# 의 PictureBox이미지 변경문제 [1]
1193박주만12/19/201318532    답변글 [답변]: C++ Dll 에서 C# 의 PictureBox이미지 변경문제 [2]파일 다운로드1
1190정진호12/10/201316642비동기로 실행할수 있도록 Custom Attribute 를 만들고 싶습니다. [1]
1189Youn...12/10/201316980책을 사기전에 궁금한것이 있습니다. [1]
1188이민석12/5/201318303ocx 를 C#에서 마샬링관련 질문입니다.. [2]파일 다운로드1
1187이성환12/3/201319520WPF WebBrowser control의 자식 창이 close 되기 전 Navgate 재호출 문제 [2]파일 다운로드1
1186박종혁12/2/201317490책의 예제 중에 result 변수가 할당 되었지만 사용되지 않았다고 오류가 납니다!! [1]
1185박은희11/27/201320616멀티바이트로 개발한 프로그램을 유니코드로 변경시 쉽게 처리 하는법 [2]파일 다운로드1
1183박현수11/20/201317429WCF에서 web.config appsetting 읽기 [1]
1184박현수11/20/201318293    답변글 [답변]: WCF에서 web.config appsetting 읽기 [3]파일 다운로드1
1182유창우11/16/201327309자마린이 궁금... [8]
... 46  47  48  49  50  51  52  53  54  55  56  57  [58]  59  60  ...