목록2024/11 (18)
anothel의 지식 창고
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Guq8i/btsKuuJbj9V/Bkejt19phFb4nALo07RXS1/img.jpg)
7장 기타 C++ 기능(Other C++ Features)7.1 Rvalue 참조 (Rvalue References)Rvalue 참조는 임시 객체에만 바인딩될 수 있는 참조 타입으로, && 구문을 사용한다. 예를 들어, void f(std::string&& s);는 std::string 타입의 rvalue 참조를 받는 함수를 선언한다. Rvalue 참조는 객체의 이동과 완벽한 전달을 가능하게 하여 성능 최적화에 유용하다.Rvalue 참조의 주요 사용 사례이동 생성자와 이동 할당연산자std::move를 이용해 rvalue 참조를 전달하면 복사 대신 값을 이동할 수 있어 성능을 크게 향상시킨다. 예를 들어, std::vector v1이 있을 때, auto v2(std::move(v1));는 대량의 데이터를 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/btQWN7/btsKvz3PiFY/nrcRuI3cxKXtsT2gJaIuj1/img.jpg)
6장 Google 특유의 테크닉(Google-Specific Magic)Google에서는 C++ 코드를 더욱 견고하게 만들기 위한 다양한 트릭과 유틸리티를 사용하며, 일반적인 C++ 관행과는 약간 다르게 코딩하는 방식도 있다. 이러한 기술들은 코드의 안정성과 유지보수성을 높이기 위한 목적으로 사용된다.Google이 사용하는 주요 기술과 관행유틸리티와 도구Google은 코드 품질을 높이기 위해 특정 유틸리티 라이브러리와 도구들을 사용한다. 예를 들어, Google Test와 Abseil 같은 라이브러리는 코드의 테스트와 유틸리티 기능을 추가하여 코드의 안정성을 높인다.모범 사례와 일관성Google은 모든 코드가 일관된 스타일과 규칙을 따르도록 함으로써, 팀의 규모와 관계없이 유지보수가 용이한 코드를 유지한..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MSkso/btsKuchI5B7/pugeo1hXV89O2ZknxhNU10/img.jpg)
5장 함수 (Functions)5.1 입력과 출력 (Inputs and Outputs)C++ 함수에서 출력을 제공하는 방식으로 반환값을 선호하는 것이 좋다. 반환값은 가독성을 높이며 성능도 유리한 경우가 많다. 다음은 함수의 입력과 출력에 관한 권장 사항이다.반환값과 출력 매개변수의 사용반환값출력을 제공할 때는 반환값을 우선으로 사용한다. 성능과 가독성이 좋다.출력 매개변수반환값 대신 출력 매개변수를 사용할 경우, 가능하면 참조를 사용하고 널이 될 수 있는 경우에만 포인터를 사용한다.함수 매개변수의 종류와 권장 사용 방식입력 매개변수보통 값 타입이나 const 참조로 전달한다.출력 및 입출력 매개변수비널(non-null)인 경우 참조로 전달하는 것이 좋다.선택적 매개변수:선택적 입력 매개변수는 std::..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bwkU39/btsKujVf6rJ/C9HThj3pGpXkEcndb8K1g0/img.jpg)
4장 클래스 (Classes)클래스는 C++에서 코드의 기본 단위로, 광범위하게 사용된다. 클래스 작성 시 따라야 할 주요 권장사항과 피해야 할 점은 다음과 같다.4.1 생성자에서 작업하기 (Doing Work in Constructors)생성자에서는 몇 가지 중요한 사항을 주의해야 한다. 특히, 가상 메서드 호출과 에러를 신호할 수 없는 초기화를 피하는 것이 권장된다.가상 메서드 호출 피하기생성자에서 가상 함수가 호출되면, 이 호출이 파생 클래스의 구현으로 디스패치되지 않는다. 현재 클래스가 파생되지 않았다 하더라도, 향후 파생 클래스가 생길 경우 문제가 발생할 수 있어 혼란을 초래할 수 있다.에러 신호의 어려움생성자에서 발생한 오류를 신호하기가 쉽지 않다. 프로그램을 종료하는 방법은 모든 상황에서 적..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bK8JLN/btsKuQLOCPR/eYqHyghaaZgDkFCai5RHFK/img.jpg)
3장 스코핑 (Scoping)3.1 네임스페이스 (Namespaces)대부분의 코드에는 네임스페이스를 사용해야 하며, 네임스페이스 이름은 프로젝트 이름과 경로에 따라 고유해야 한다. using 지시문(e.g., using namespace foo)과 인라인 네임스페이스는 사용하지 않으며, 무명 네임스페이스는 내부 연결에서 다룬다.네임스페이스는 글로벌 스코프를 독립적이고 이름이 지정된 스코프로 분할해 이름 충돌을 방지하는 역할을 한다. 예를 들어, 두 프로젝트가 모두 전역 범위에서 Foo라는 클래스를 정의할 경우, 컴파일 또는 런타임에 충돌할 수 있다. 그러나 각 프로젝트가 네임스페이스를 사용하여 project1::Foo와 project2::Foo로 구분한다면, 충돌을 방지하면서 각 프로젝트 내부에서는 F..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/djhkGJ/btsKvMPpvdE/9AJwBaNNWKKLeNJLBdCXek/img.jpg)
2장 헤더 파일 (Header File)일반적으로, 모든 .cc 파일에는 관련된 .h 파일이 있어야 한다. 다만, 단위 테스트 파일이나 main() 함수만 포함하는 작은 .cc 파일 등은 예외로 인정된다.헤더 파일을 올바르게 사용하는 것은 코드의 가독성, 크기, 성능에 큰 영향을 미친다. 이 가이드에서는 헤더 파일 사용 시 발생할 수 있는 여러 문제점을 피할 수 있는 규칙들을 제시한다.2.1 자체 포함 헤더 (Self-contained Headers)헤더 파일은 독립적으로 컴파일될 수 있도록 자체 포함형으로 작성해야 하며, 확장자는 .h로 끝나야 한다. 헤더가 아닌 포함용 파일은 .inc 확장자를 사용하며, 필요한 경우에만 제한적으로 사용해야 한다.모든 헤더 파일은 자체 포함형이어야 하며, 이를 포함하는..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Fgpyk/btsKuRDYk02/DcWOpdCq4ejkj8NBjxHaO1/img.jpg)
1장 C++ 버전 (C++ Version)현재 구글 C++ 스타일 가이드는 C++20을 기준으로 코드를 작성하도록 권장하며, C++23 기능은 사용하지 않는 것을 원칙으로 한다. 가이드는 최신 C++ 버전으로 빠르게 전환할 계획이기 때문에, 코드 작성 시점에 맞는 최신 가이드를 참고하는 것이 중요하다.비표준 확장은 사용하지 않는 것이 원칙이다. 또한, C++17과 C++20의 기능을 프로젝트에 적용하기 전 다른 환경으로의 이식성을 반드시 고려해야 한다.참조URLhttps://google.github.io/styleguide/cppguide.html
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ttHxK/btsKuuvIGTl/nbwZvkenRkjCNwYF0Nuye1/img.jpg)
2024년도에는 진짜 마지막 구글 C++ 스타일 가이드 포스팅을 해낸다.배경 (Background)C++은 구글의 여러 오픈 소스 프로젝트에서 주요 개발 언어로 사용되고 있다. C++을 사용하는 개발자라면 알다시피, 이 언어는 강력한 기능을 제공하지만 그만큼 복잡성을 동반하며, 코드가 버그에 취약해지고 읽기 어려워지거나 유지보수가 까다로워질 수 있다.이 가이드는 C++ 코드를 작성할 때 지켜야 할 사항과 피해야 할 사항을 상세히 설명함으로써 이러한 복잡성을 관리하고자 한다. 이러한 규칙들은 개발자가 C++ 언어의 기능을 생산적으로 활용하면서도 코드베이스를 관리 가능하게 유지하는 데 그 목적이 있다.스타일 또는 가독성이라 불리는 규칙은 단순한 소스 파일 형식 이상의 관습을 포함하는데, 이는 코드 작성 방식..