클래스 선언 중괄호 뒤의 세미콜론
C ++ 클래스에서 닫는 중괄호 뒤에 세미콜론이있는 이유는 무엇입니까? 나는 정기적으로 그것을 잊어 버리고 컴파일러 오류가 발생하여 시간을 낭비합니다. 나에게는 다소 불필요 해 보이지만, 그럴 것 같지 않습니다. 사람들이 정말로 다음과 같은 일을합니까?
class MyClass
{
.
.
.
} MyInstance;
구조체와 열거 형에 대한 C 호환성 관점에서 얻었지만 클래스는 C 언어의 일부가 아니기 때문에 주로 비슷한 선언 구문 사이의 일관성 유지에 있다고 생각합니다.
내가 찾던 것은 무엇이든 변경할 수있는 것보다 디자인 근거와 더 관련이 있었지만 좋은 코드 완성 IDE는 컴파일 전에 이것을 트랩 할 수 있습니다.
유형 선언에서 닫는 중괄호 뒤의 세미콜론은 언어에 필요합니다. C의 초기 버전 이후로 그렇게되었습니다.
그리고 예, 사람들은 실제로 당신이 거기에 올린 선언을합니다. 메서드 내에서 범위가 지정된 유형을 만드는 데 유용합니다.
void Example() {
struct { int x; } s1;
s1.x = 42;
struct ADifferentType { int x; };
}
이 경우 세미콜론이 필요한 이유가 분명하다고 생각합니다. 헤더 파일에서 선언하는 더 일반적인 경우에 왜 필요한지 잘 모르겠습니다. 내 생각 엔 그것이 역사적이고 컴파일러를 더 쉽게 작성하기 위해 수행되었다는 것입니다.
링크 @MichaelHaren에 의해 제공은 제공하기 위해 나타납니다 근본 원인을 . 세미콜론 (다른 사람들이 지적했듯이)은 C에서 상속되었습니다. 그러나 이것이 C가 처음에 세미콜론을 사용한 이유를 설명하지 않습니다. 토론에는 다음과 같은 예제가 포함됩니다.
struct fred { int x; long y; };
main()
{
return 0;
}
이전 버전의 C는 달리 선언되지 않는 한 함수에서 암시 적 int 반환 유형을 가졌습니다. ;
구조체 정의의 끝에서 를 생략하면 새로운 유형을 정의 할 fred
뿐만 아니라 main()
인스턴스를 반환 할 것을 선언하는 것입니다 fred
. 즉 코드는 다음과 같이 구문 분석됩니다.
struct fred { int x; long y; } main()
{
return 0; /* invalid return type, expected fred type */
}
클래스는 그룹화를 위해 중괄호가 필요한 경우에도 선언이기 때문이라고 생각합니다. 그리고 예, C에서 할 수있는 역사적 주장이 있습니다.
struct
{
float x;
float y;
} point;
C ++에서 비슷한 일을 할 수 있어야합니다. class
선언이 같은 방식으로 작동 하는 것이 합리적입니다 .
짧습니다.
class MyClass
{
.
.
.
};
// instance declaration
MyClass MyInstance; // semicolon here
클래스 선언의 중괄호 뒤의 세미콜론은 실제로 과잉이지만 C ++가 정의되는 방식입니다. 변수 선언 뒤의 세미콜론은 항상 필요하며 의미가 있습니다.
I do not use such declarations
class MyClass
{
.
.
.
} MyInstance;
But in this case I can understand why is semicolon there.
Because it is like int a;
- variable declaration.
Probably for consistence as you can omit 'MyInstance' semicolon stays there.
It is needed after a struct
for compatibility reasons, and how would you like this:
struct MyStruct { ... };
class MyClass { ... } //inconsistency
In C/C++ the ; is a statement terminator. All statements are terminated with ; to avoid ambiguity (and to simplify parsing). The grammar is consistent in this respect. Even though a class declaration (or any block for that matter) is multiple lines long and is delimited with {} it is still simply a statement (the { } is part of the statement) hence needs to be terminated with ; (The ; is not a separator/delimitor)
In your example
class MyClass{...} MyInstance;
is the complete statement. One could define multiple instances of the declared class in a single statement
class MyClass{...} MyInstance1, MyInstance2;
This is completely consistent with declaring multiple instances of a primitive type in a single statement:
int a, b, c;
The reason one does not often see such desclaration of class and instance, is the instance could ?only? be a global variable, and you don't really often want global objects unless they are static and/or Plain Old Data structures.
참고URL : https://stackoverflow.com/questions/785686/semicolon-after-class-declaration-braces
'programing tip' 카테고리의 다른 글
프런트 엔드 개발자 인터뷰 질문 (0) | 2020.10.25 |
---|---|
모든 주소 대신 단일 IP 주소 (localhost)에 바인딩하도록 tomcat을 어떻게 구성합니까? (0) | 2020.10.24 |
코드에서 이벤트 핸들러를 호출하는 것은 왜 나쁜 습관입니까? (0) | 2020.10.24 |
jquery가 게시물 작업 URL을 가져옵니다. (0) | 2020.10.24 |
Git 및 Mercurial을 사용한 부분 복제 (0) | 2020.10.24 |