표준형과 사용자 정의 형을 구문 적으로 구별하는 요점은 무엇입니까?


13

여기서는 C ++ 및 Bjarne Stroustrup의 명명 규칙을 구체적으로 언급하지만 원칙적으로 사람들이 여기저기서 다른 언어에 대해 다소 유사한 규칙을 사용하는 것을 보았습니다.

따라서 기본 아이디어는 코드를 읽는 동안 표준 유형을 사용자 정의 유형과 구별 할 수 있어야한다는 것 입니다. 예를 들어, Bjarne Stroustrup은

유형의 초기 대문자 (예 : 정사각형 및 그래프)

이를 고려하면

C ++ 언어 및 표준 라이브러리는 대문자를 사용하지 않습니다

위에서 언급 한 목표를 달성 할 수 있습니다.

그러나 그렇게해야합니까? 표준 및 사용자 정의 유형을 구별하는 목적은 무엇입니까?

나는 그 문제에 대한 Bjarne Stroustrup의 추론을 찾을 수 없었으며, 또한 나는 정반대 방식으로 생각합니다. "DI는 누가 Stroustrup에 이의를 제기해야합니까?" 그러나 연산자 오버로드와 같은 많은 C ++ 언어 기능은 사용자 정의 형식이 표준 형식과 비슷한 수준의 구문 지원을 허용하는 목적으로 사용됩니다. 그리고이 모든 것은 다른 명명 규칙에 의해 당황합니다 ...

추신 : 한 단어만으로는 클래스의 이름을 짓기에 충분하지 않으며 대문자로 시작하는 밑줄로 분리 된 단어는 너무 외국처럼 보입니다.


6
결국 헝가리어 표기법의 형태라고 할 수 있습니다 (즉, 이름에 유형 / 사용법에 대한 정보를 포함). 따라서 좋은 질문입니다.
stijn

2
@stijn : 네,하지만 눈살을 찌푸리는 지 아십니까? 당시에는 모든 사람이 텍스트 편집기를 사용하여 프로그램을 작성할 때 식별자를보고 유형을 아는 것이 유용했습니다. 그러나 오늘날 최신 IDE에서 식별자 위로 마우스를 가져 가면 유형을 알려줍니다.
Robert Harvey

4
@RobertHarvey 헝가리어 표기법은 강력한 IDE가 없거나 대부분 일반 텍스트 편집기를 사용하는 커뮤니티에서 제외됩니다.

1
@RobertHarvey 아니요, 저는 "앱 헝가리어"와 "시스템 헝가리어"를 모두 알고 있으며 제 경험으로는 Python과 Rust에서 일반적이지 않습니다.

3
@RobertHarvey 헝가리어 표기법이 C, C ++ 및 VB에만 존재한다고 말하는가? 어쨌든, 내 요점은 당신이 찌푸린 이유에 대해 의문을 제기하는 것이 었습니다 (왜냐하면 유형을 알려주는 IDE가 있기 때문에 중복적임). 그 이유는 그러한 ID가없는 언어에는 적용되지 않기 때문입니다. 당신의 추론에 의해 헝가리어의 혜택을 받아야합니다. 동적으로 입력 된 파이썬은 어떤 차이가 없다는 사실이 있어야 향상 코드를 작성할 때 일반적으로 프로그래머가 유형을 알고 있기 때문에 추론을하지만, 그들은 자동으로 추론 할 수 없습니다.

답변:


5

그러한 목적에는 절대 목적이나 이점이 없습니다. C ++의 목표 중 하나는 UDT와 프리미티브를 상호 교환 가능하게 처리하는 것이 었으며, 완전히 성공하지는 않았지만 차별화 할 필요가없는 영역입니다.

명명에 관해서는 Stroustrup은 견과이며 과학적으로 입증 된 사실입니다.


2
RAII를보고 SFINAE를 높이십시오.
Robert Harvey

5
표준 유형을 UDT와 구별하는 것이 어떻게 유용한 지 알 수있었습니다. 당신이하지 않는 한 당신은 표준 라이브러리의 코드를 변경하지 마십시오 정말 너무 낮은 경우를 보는 것은 당신이 아니라, 그것은 표준 라이브러리에있어, 때문에 코드를보고 갈 필요가 없습니다 것을 나타냅니다, 좋은 이유.
Robert Harvey

4
@delnan : 그렇습니다. 그것은 "많은 사람들"의 권위에 대한 호소에 지나지 않습니다. "많은 사람들"이 여기로 와서 그들의 추론에 대해 논의하고 싶다면, 그들은 자유롭게 할 수 있으며 그때까지는 추가 할 것이 없습니다. FTR, UDT에도 대문자를 사용하지만 별칭을 지정해야 할 때마다 기본 요소에도 대문자를 사용합니다.
DeadMG

2
@RobertHarvey : 표준 유형을 인식 할 수 없다고 가정합니다. 또는 환경에서 마우스를 마우스로 가져 가서 "std ::"를 확인하십시오. 또는 Go To Definition 등을 사용하여. 따라서 기본적으로 적용되지 않습니다.
DeadMG

1
필자는 항상 네임 스페이스가 등장하기 전에 표준 유형과 구별하는 것이 목적이라고 생각했습니다. 요즘은 옛 생각의 유물 일뿐입니다. FWIW, 개인 프로젝트에서는 snake_case클래스와 네임 스페이스에 작은 글자 를 사용 하며 아직 이로 인해 문제 나 혼동이 없었습니다.
utnapistim

3

명명 규칙은 코드의 인간 (즉, 프로그래머와 관리자) 이해를 지원하는 것에 관한 것입니다.

변수, 초기화, 표현식 및 명령문 선언이 표준 유형의 경우와 다르게 작동하도록 UDT를 지정할 수 있습니다. 문제를 찾기 위해, 관리자는 코드의 일부 섹션이 펑키 한 일을 할 수 있다는 신호를받는 것이 유용합니다 (예를 들어 일부 함수 내에서 사용되는 사용자 정의 정수 유형의 구현에는 추가 방법에 결함이있을 수 있음).

이러한 단서를 제공하는 방법에는 여러 가지가 있습니다 (의견, 설계 사양 등). 이름 지정 규칙의 장점은 코드에 존재하지만 주석은 오래되었거나 생략 할 수 있다는 것입니다.


2

유형에 대문자를 사용하는 한 가지 이유는 변수를 유형과 구별하는 것입니다. 이를 통해 대문자를 제외하고 동일한 이름으로 변수를 선언 할 수 있습니다.

Foo foo;
Graph graph;

이는 구성 설정과 같이 각 컨텍스트에서 하나의 인스턴스 만 사용되는 클래스에 유용 할 수 있습니다.


IMHO 이것은 제목의 질문에 대답하지 않습니다. 어쩌면 "이 점에서 작은 글자로 표준 유형의 이름을 지정하는 것은 cstdlib와의 하위 호환성만을위한 것"이라고 덧붙일 수 있습니다.
Vorac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.