책 "전문가를 위한 C++" - 1.1 C++의 기초
프로그래밍/c,c++ 2021. 1. 5. 17:33"전문가를 위한 C++" 내용 정리
www.yes24.com/Product/Goods/77669043
namespace - 이름이 충돌하는 문제를 해결하기 위해 나온 개념
내가 작성한 코드의 함수명과 외부 라이브러리의 함수명이 같을 때
mycode.h
namespace mycode {
void foo();
}
mycode.cpp
namespace mycode {
void foo() {
std::cout << "foo() called in the mycode namespace" << std::endl;
}
}
mycode::foo();
using namespace mycode;
foo();
한 파일에서 using 을 여러개 사용하면 namespace를 사용하지 않는 것과 동일 한 상황이 됨
특정 항목에 대해서만 using 사용 가능함
using std::cout;
cout << "Hello world" << std::endl;
casting - c++ 방법 : i3
float myFloat = 3.14f;
int i1 = (int)myFloat;
int i2 = int(myFloat);
int i3 = static_cast<int>(myFloat);
연산자 - 우선순위 애매하면 ()
int i = 34 + 8 * 2 + 21 / 7 % 2;
int i = 34 + (8 * 2) + ((21 / 7) % 2);
enum 타입
const int PieceTypeKing = 0;
const int PieceTypeQueen = 1;
const int PieceTypeRook = 2;
const int PieceTypePawn = 3;
int myPiece = PieceTypeKing;
enum PieceType {
PieceTypeKing,
PieceTypeQueen,
PieceTypeRook,
PieceTypePawn
};
PieceType myPiece;
myPiece = 0; // ERROR
엄격한 타입(형변환 방지 및 사용 범위 지정)
enum class PieceType {
King = 1,
Queen,
Rook = 10,
Pawn
};
if (PieceType::Queen == 2) { ... } // ERROR
if (static_cast<int>(PieceType::Queen) == 2) { ... }
저장 되는 타입 지정 가능
enum class PieceType : unsigned long {
King = 1,
Queen,
Rook = 10,
Pawn
};
bool 타입 : true, false
함수 리턴 타입 추론
여러개 return 이 있을 경우 모두 동일 타입이어야 함
auto addNumbers(int number1, int number2) {
return number1 + number2;
}
배열 - c스타일 대신 std::array
장점 : 크기 명확, 자동 포인터 형변환 방지, 반복자로 배열 원소 접근
array<int, 3>arr = { 1, 2, 3 };
cout << "size = " << arr.size() << endl;
cout << "2nd = " << arr[1] << endl;
std::vector - 자동 확장
vector<int>vec = { 1, 2, 3 };
cout << "size = " << vec.size() << endl;
cout << "2nd = " << vec[1] << endl;
vec.push_back(4);
cout << "size = " << vec.size() << endl;
cout << "4th = " << vec[3] << endl;
범위 기반 for 문
std::array<int, 4> arr = { 1, 2, 3, 4};
for (int i : arr) {
std::cout << i << std::endl;
}
int carr[4] = { 5, 6, 7, 8 };
for (int i : carr) {
std::cout << i << std::endl;
}
initializer list
include <initializer_list>
클래스 템플릿, 타입 세이프
int a = makeSum({ 1, 2, 3 });
int b = makeSum({ 10, 20, 30, 40, 50, 60 });
// int c = makeSum({ 1, 2, 3.0 }); // ERROR
cout << "a = " << a << ", b = " << b << endl;