ㄱㄱ.이렇게 하고 저장 ㄱㄱ.ㅇㅇ.해당 경로에서 이렇게 하고실행 가능.SASM 은 지금 이녀석은 통합 환경 Tool이라고 보면된다.그리고 이전에 setting에서 NASM이라는 것도 골라 주었는데이녀석.이게 이제 Assembler의 역할을 한다.어셈블리 언어는 딱 이게
ALU = 연산레지스터 = CPU's 부품.2의 보수법https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C5랑 더해서 0이 나오는 수가 -5임..그냥 모든 수 반전 후 +15의 음수를 찾고싶다면10 0 0 0 0 1 0 1 -
레지스터와 메모리 사이의 데이터를 왔다갔다 하는거 그런 방벙에 대해서 알아 볼 것이다.레지스터는 메모리 안에 있는 것이다.레지스터(Register)의 이해레지스터는 CPU(Central Processing Unit)가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장
exe파일 구조를 보면은Sextion 에 data라는 영역이 있다는 것을 확인이 가능하다.이 영역이 파일에 저장이 되어있는데 이게 나중에 실행파일을 실행 해가지고 해당프로그램이 실행이 되면은 파일 내용이 메모리에 다 올라간다.추가로 이녀석만 올라가는게 아니라메모리 구조
오늘은 msg를 출력하는 부분에서 이게 왜 이렇게 되는지에 앞서 데이터와 관련된 내용을 더 알아볼 것이다.
이것을 알기위한 사전지식어소에서는 wchar_t arr10 = L"asd"; 뭐한 문자당 2바이트 할당했었는데... 뭐노? db == 1byte인데 어케됨?a db 0x00 이러헤 data 영역에 16진수가 들어갈거같지만데이터는 공평해서 메모리에 01010100이런거
이렇게 GET_DEC 입력으로 Input에 입력을 받아주고보면은 출력됨참고로 이런 문장이나 함수들은 이제 나중에 처다도 안 볼 것이니 걱정 ㄴㄴ.add a, b ( a = a + b )a는 레지스터 or 메모리b는 레지스터 or 메모리단, a, b 모두 메모리일 경우
계산기 사용법32에서 left shift 상태에서64나온다왜냐 왼쪽으로 비트 옮기면 2^1 만큼 증가함.PRINT_HEX '4' 는 4바이트 출력한다는거임2로 놔두면 5678 출력되는데 이유가 16진수 두자리는 1바이트 이고,저번시간에 배운https://vel
어셈블리에서는 if문이 딱하나의 문법으로 존재 하지 않아서 여러개 조합해서 만들어야한다.조건 -> 흐름문법CMP dst, src (dst가 기준)이렇게 계산을 하면 결과가 어딘가에는 저장이 되어있다.곱셈이나 나눗셈의 경우 "지정한" 레지스터에 저장이 됨.우리가 이전에
메모리에 문자열 올리면 0x00 으로 끝을 명시 해주어야함! 반복문 구현 어셈블리에서 반복문은 cmp, jumo를 이용해서 구현이 가능하다. 연습문제 1~100까지의 합 구하기 내가 구현 논리연산자 활용 👍 나는 지금 mov ax, 0했는데 0으로 밀
우리는 간단하게 맛보기만 하고 넘어갈 것이다.나중에 CPP에서 더 알아 볼것이다.배열과 리스트: 동일한 특성의 데이터들의 집합을 가리키는 자료구조둘의 가장 큰 차이는 구조적 차이라고 생각한다.배열의 경우 연속된 메모리 공간에 할당되고, 리스트의 경우 메모리가 연속적인
함수 (프로시저 , 서브루틴)이렇게 PRINT_MSG라는 함수를 만들 수 있고call로 저곳으로 뛰어넘을 수 있다.(라벨과 비슷)레지스터를 사용하여eax, ebx에 입력값을 ecx에 반환해보도록 하자.cmp 를 사용하여 eax가 더 크다면(jg) -> L1ebx가 같거
스택 메모리, 스택 프레임.이거 두개는 기본기임.스텍 메모리와 셋트이다.바다의 파도를 생각하면된다.스텍 메모리도 "높은 주소" -> "낮은 주소"로 늘어났다가 줄어들었다가 한다.왔다 갔다하는 방식으로 진행이 된다.지금 인 상태로 뭔가를 저장을 하고, 이상태에서 다른 함
Hello World라는 한줄 짜리 출력문이어셈블리 언어로 뜯어보면은어셈블리 한줄이 CPU instruction한개랑 (1ㄷ1 대칭)맞먹는다고 보면된다.우리가 배웠던 문법들과 안 배운 문법들이 등장을 한다.을 단순하게 생각하자.적절한 데이터를 저장하고 가공하는 것데이터
bool = 1바이트 정수왜 정수 시간에 안다뤘나\-> 일리 있음 어셈블리에서 bool이라는 것은 없음참/거짓 둘중 하나라는 힌트를 준다 => "가독성"c++은 어셈블리보다 하이레벨 언어여기서 이거 한칸만 쓰는데...어셈블리 시간에서레지스터도 al 과 같은 최소 연산
char : 알파벳 / 숫자 문자를 나타낸다.wchar_t : 유니코드 문자를 나타낸다.국제화 시대에서는 이 아스키 코드 표로만 다 서비스 할 수 없다.그래서 나온게 "유니코드"유니코드 : 전 세계 모든 문자에 대해 유일 코드를 부여한 것.UTf8UTF16알파벳, 숫자
비쥬얼 스튜디오같은 프로그램이 실행되면 -> SSD에 저장되어있는 "파일의 정보"가메모리에 올라간다.실행.그리고 그 할당된 메모리 공간에 변수를 할당을 하면 그 메모리 공간을 사용을 하는 것이다.대입연산자의 '='는 대입하고 반환이다. 그래서이런게 가능b에 3을 대입하
==, <, >, <=, >= => 1, 0을 반환! not&&\|\| A && B 에서의 B && A 의 위치를 바꾼 것에 따라약간의 성능 차이가 생길 수 있다.A가 맞지 않는다면 && B의 조건을 보지도 않기때문이다.실제로 어셈블리를 뜯어보아도 그렇다.
대표적으로 비트 Flag~ : bitwise not 단일 숫자의 모든 비트를 대상으로 반전& : bitwise and두 숫자의 비트 쌍을 대상으로 and 한다.| : bitwise or 두 숫자의 비트쌍으로 대상으로 or한다.^ : bitwise xor두 숫자의 비트쌍
const붙이면 변수를 상수화 함.const를 붙였으면 초기값을 반드시 지정해야함.스택있고힙 있고데이터 영역있는데데이터 영역안에 3가지로 분류됨.그다음 코드 영역 있다..data : 초기값이 있는 경우.bss : 초기값이 없는 경우.rodata : 읽기전용 데이터함수
{} 가 변수의 범위이다.조금이라도 혼동이 오는 경우 () 묶어서 연산을 해주도록 하자.데이터가 짤려서 나가서 작은 값 들어가게된다.반대로하면 4294967295 최대 값 나온다.오버 플로우 조심!int / float or float / int => 연산결과가 floa
switch 문에 인자로는 "정수 계열"만 넣을 수 있다.float 이런거 안들어가짐.
rand() 함수를 사용하면되는데이게 고정이라서 사실 랜덤이 아니다.컴퓨터에는 랜덤이라는 개념이 없다.그래서 srand() 에 시드값을 설정한다.또한 같은 시드값을 주면 같은 랜덤값이 나오기 때문에srand(time(0)); 이렇게 시간값을 주는것이 일반적이다.0~32
이럴경우 const int a는 메메모리에 올라 갈 수도 있고안 올라갈 수도있다.컴파일러가 최적화 하느냐 마느냐이다.그런데 enum은 컴파일을 하면 무조건 메모리에 안올라가고그냥 b = 0, c = 1 로 데대체하여 사용하기 때문에const int a이런식으로 한거보다
메모리 구조이다.스택의 구조이다.함수가 호출이 되면먼저매게변수 메모리 잡고 (매개변수)되돌아갈 메모리 주소를 할당 받고, (반환 주소값)이전함수의 주소를 메모리에 할당받는다.그 다음에 호출당한 함수의 지역변수의 메모리 크기를 알맞게 알아서 잡는다. 2번의 반환주소값으로
전역변수는 데이터 영역에 들어가는데조금더 자세히 보면은데이터 영역안에서도 초기화 여부랑, const여부에 따라서 .rodata, .data, .bss 에 들어간다..data는 초기화 하지 않은거 .bss는 초기화한거?(근데 이부분 그냥 데이터 영역에 들어가는거만 생각
지금 Func1부터 호출을 하면 에러가 난다.이유는 CPP같은 경우 코드를 위에서부터 아래로 하나씩 하나씩분석을 한다고 보면된다.지금Func1을 분석을 했는데Func2를 호출하라고 하니까 모르는 것이다... => 식별자 에러!그래서 먼저 "전방 선언" 하든가 다른 방
반환 형식이 다른 것 만으로는 오버로딩 할 수 없다.
지금 구조체에의 크기가 16byte일거같지지만당연히 맞다.그런데 타입이 이런식으로 다를 경우2 + 4 + 1 + 4 => 11바이트?실제로 11바이트 아니다."Paading"이라는 것이 붙는다고 생각하면 된다.빈공간이 추가가된다.빈공간을 넣어준 이유는 컴퓨터가 계산하기
의 메모리를 보면은이게 지금 number의 스택메모리 주소값이다." 0x000000A831B8F994 "이안에 지금 0x00000001 이 들어가있음그러면 포인터를 보도록 하자.이게지지금 포인터 변수의 스택 메모리 주소값인데엔디안에따라 값이 거꾸로 있기 때문에00000
타입은 왜 붙이는가?4바이트 정수인인 number의 주소를 \_\_int64 8바이트 정수로 강제 캐스팅 해서해석을 하겠다라는 의미이다.그르면 숫자 달라지겟지.그리고값을 이렇게 8바이트로 넣어주도록 하자.이값을 8바이트로 읽으면 넣어준 값이랑 똑같은데4바이트 정수로 읽
포인터와 관련된 연산주소 연산자 &산술 연산자간접 연산자간접 멤버 연산자pointer라는 변수에 데이터 부분의 주소값이 4만큼 증가함.즉, 다음/혹은 바구니로 이동하고싶다.포탈을 타고 해당 주소로 슝~ 이동.Player라는 struct 만들고 그 객체를 player라고
지금 구조체의 멤버변수는 이런식으로 4바이트 씩 증가를 하는 메모리 주소를 가진다.밑에 int hp, int attack, int defence랑 다를게 없다.지금 이부분이 사실은player를 넘겨준게 아니라 temp라는 것을 임시로만들어서함수에 매개변수로 넘겨주고호출
이런식으로 코드가 작성되어있다고 보자.그리고 스택 프레임을 보면은매개변수지역변수이 삼총사가 반복이 되는데그리고 함수를 호출 할 경우에는이렇게 info의 주소를 넘겨주면된다.그리고 main함수의 스택 프레임을 보자면은매개변수지역변수 (info 지역변수에 info라는 구조
성능 포인터 참조 똑같다.편의성참조 좋다.근데 무조건 장점만은 아님.참조 마음대로 고칠 수 있기 때문에const붙여준다.포인터도 const 붙이는거 가능하다.const int || int const경우가 뭐가 있냐면은int\* const ptr; 이렇게하면 주소값을 변
배열의 이름은 == 배열의 시작주소이다.이렇게 선언해주도록 하자.이렇게하면배열의 이름을 입력해서 메모리 가보면 이렇게 값들이 10개로 다 들어가있는거 확인 가능하다.VC 컴파일 기준임.왜? =>조커 카드 느낌으로 뒤에 변수에 따라 변한다.(CStatInfo의 포인터이다
C스타일의 배열의 경우 끝에 '\\n' 넣어주야한다.원래 문자는 배열이다.이렇게 const char 12칸짜리 이다.12인 이유는 '\\n'이 들어간 것이다.이거 두개다 아무런 문제 없이 통과가 되었다.그러면 포인터와 배열이 같은 것인가...???=> 배열과 참조를 햇
이렇게해야 성능에 조금 더 좋다.지금 Sort함수의 두번재 인자로 계속 정수를 넣어주는데정렬된 상태로 만들어라이중반복문 안에서 이중안에서 break써도 for문 빠져나간다.이미 찾은건지 아닌지 boolean하나 놔두면됨.
const 가 안 붙어있다는 가정하에 값을 수정을 할려면\*a = "머시기"; 이런식으로 수정해야한다.const char msg의 경우 const 가 이전에 붙어있어서포인터 변수가 가르키는 곳의 데이터를 수정못한다!msg의 문자열이 수정이 안되는 이유?현재 Hello
주소를 담는 바구니 진퉁은 저 멀리(힙)있음. p는 단지 그곳으로 워프하는 포탈 진짜 배기 원조데이터 닭장처럼 데이터의 묶음 (엄청 많고 거대함) 현재 출력을 하면 이런 상태로 크래쉬가 난다.현재 ptr22의 주소값은 0x0000006E5EEFF928 이거이다.그렇다
포인터로 넘길 때의 스택 메모리의 생명주기 기억주소값을 막 넘긴다고 해도 PlayerInfo의 생명주기랑MonsterInfo의 생명 주기가 다르다.
strcpy() 라는 함수로 dest, source 인자로 받는다.그런데 이거 오래된 구닥다리 버젼이라복사는 애랑 복사당하는 애랑 크기 않맞으면 다른 메모리 오염시킴 그래서 strcpy_s 버젼이 있다.이렇게 했는데 빼먹은게 있다!8번째 인덱스 '\\n' 까지 들어가야
착각하는 경우가배열의 이름은 배열의 시작 주소라고했다.\*배열이름 했을 때의 값이 같은 것이지이런말이라서 a == b가 같을 수 없다.a가 가르키는것은 주소값, b가 가르키는 것도 주소값이기 때문에strcmp(a, b) => int 로 뱉어줌순서도 나타 내준다.lne
실제 알고리즘 문제를 풀때는 그냥 전역변수 막 사용해라.
헤더 파일 폴더 없어도됨 -> 삭제 .h, .cpp 파일 분할로 작업하는거 추천 하면 내용 똥째로 복붙이다. 구조체를 헤더파일에 구현해놓고형식 재정의 에러뜬다.같은 이름의 구조체가 여러개 있는 거임.Test.h 에서 함수 정의 및 구조체 구현을 했다 치자.Test1.
Procedure == 함수 == 메소드"절차" == Prcedure Procedure 지향 프로그래밍 == 함수 지향적 프로그래밍.대표적인 객체 지향 언어는 CC++도 객체지향 언어이냐? 라고 물어보면좀 애매하다.C++는 약간 혼혈아 느낌임.이 두함수의 어셈블리를 뜯
생섲아와 소멸자생성자 : 여러개 존재 가능소멸자 : 오직 1개만 존재 가능.종류기본생성자복사 생성자기타 생성자 (인자를 받는 생성자)암시적 (implicit) 생성자.이렇게 기본생성자랑 인자를 받는 생성자 만들어 주고이런식으로 인자를 넘겨줄 수 있다.자기 자신의 클래스
OOP Object Oriented Programming상속성은닉성다형성메모리 구조를 보면은Player의 정수 3개 12바이트 + Knight의 정수 변수 1개 4바이트 해서16바이트가 스택메모리에 올라간다.이렇게그러니까 부모의 설계도를 이어받아서 위로 쌓아 올리는 느
은닉성 - 캡슐화 Data Hiding - Encapsulation 접근 지정자 public private protected Get, Set 접근하면 안되는 멤버 변수같은거 접근 할 경우 (C#의 프로퍼티 같은걸로 접근 할 경우) _hp를 건들이면 거기
Polymorphism = Poly + morph겉은 똑같은데, 기능이 다르게 동작한다.다형성을 제공하는 여러가지 요소들 중 유명한게오버로딩 : 함수 중복 정의오버라이딩 : 함수 재정의 (부모 클래스의 함수를 자식에서 재정의)이런함수가 있다고 가정을 하자.main에서
귀찮은데...이상태로 실행하면 컴파일 에러가 난다=> 초기화 되지 않은 지역변수 사용.그런데 이것은 컴파일 레벨을 조정하기에 따라서 달라진다.(기본 설정은 에러)이후 기본생성자만 추가를 해서 객체를 만들면0이 들어가야할거 같지만 -87828485? 이라는 이상한 값 들
연산자는 피연산자의 개수/타입이 고정되어있다.피연산자의 개수가 1개인 경우도 존재 (++a/a++)연산자 함수 를 정의 한다.함수도 멤버함수 vs 전역함수가 존재하는 것 처럼, 연산자 함수도 두가지 방식으로 만들 수 있다.이렇게 만들 어 줄 수 있다.이게 사실은위에는
차이점?종이 한장 차이이다.구조체는 "기본 접근 지정가"가 public, 클래스는 기본 상태가 private이다.이거말고는 거의 다 똑같다.왜? => C++이 C에서 발전하다 보니까 어느정도의 호환성을 맞추기 위해서... 이렇게됨.static = 정적 = 고정된.클래스
이런식으로 존나 크게 만들어 놓을 경우 한번 보자.스택은 애초에 어마어마하게 많은 데이터를 저장하고 사용하는 용도가 아니라함수들 끼리 인자를 좀 자연스럽게 주고받기 위해서 사용하는 메모리 영역이다.저 코드가 실행이 되기는 하는데문제점이 게임이 망해서 1명밖에 없더라도
지난 시간malloc -> void\* 반환하고, 이를 우리가 (타입 변환)을 통해 사용했었다.값 타입 변환참조 타입 변환의미를 유지하기 위해, 비트열을 재구성계산기 두드리면 이런 값이 들어있다~인데float같은 경우에는 완전히 다른 값이 들어가있는데의미를 유지하기 위
knight2를 만들때랑 knight3를 만드는 방법은 엄연히 다르다.이코드를 실행을 하면은 굉장히 신기하게도아무런 에러가 없이 통과를 하는데이는 "복사 생성자", "복사 대입 연산자"는 컴파일러가 알아서 만들어 주기 때문이다.컴파일러가 "암시적으로 만들어 준다"차례대
static_castadynamic_castconst_castreinterpret_cast이 4가지로 다 캐스팅한다(int)이것은 C에서 넘어온 고전적인 캐스팅 방식C++로 작업을 할 때는 이런 (int) c스타일은 자제하고4가지중 하나를 선택해서 캐스팅 해야한다.타입
객체 지향적으로 생각을 하자.C가상 폴더 느낌임.실제로는 한곳에 다 때려박혀있음.
스택이건 힙이건 관련 없이이렇게해서 빌드를 하면 통과를 한다.Player의 설계가 완성이 되었다는 것이다.이런식으로 메모리에 Player를 올리기위해서 가장 중요한 부분은이 Player의 크기가 몇 바이트인지 알아야 한다.동적할당도 마찬가지로 Player가 몇 바이트
현재 값은 10인데 조사식에서 값을 수정 할 수도있다.그러면 number는 진짜 15라는 값을 가지게됨.(새로 알았다)그러면 조사식에서 값을 수정을 하여 코드가 다른길로 if분기 처리를 해놓은 부분으로도 갈 수 있겠다.
1번 스택 메모리 https://velog.io/@starkshn/%EC%B4%88%EA%B8%B0%ED99%94-%EB%A6%AC%EC%8A%A4%ED%8A%B8#%EC%8A%A4%ED%83%9D-%EB%A9%94%EB%AA%A8%EB%A6%AC 현재 스택 메모
언리얼 엔진 사용하다보면은 STL내용을 배워야한다.언리얼엔진은 C++ STL사용하지 않고 자체 라이브러리 사용한다.STL을 공부하기 위해서는 사전 지식필요함수 포인터함수 객체템플릿일단 포인터라는 것은이렇게 사용이 가능하고 이러이러한 개념이다~함수 라는 것 자체는이런 형
함수 객체 Functor 개념 > 함수처럼 동작하는 객체 함수 포인터의 단점 > 완전히 동일한 모양(시그니처)로 만들어진 함수만 포인터로 들고있을 수 있다라는 단점. 근데 이것을 함수 객체를 이용하면 어느정도 극복이 가능함. 1분복습 이렇게 선언 사용, 동
템플릿 내용이 방대해서 이거 하나로만으로도 책을 낼 수 있다.함수나 클래스를 찍어내는 툴이런식으로 함수 오버로딩을 통해서 다른 인자타입을 받는것을 늘릴 수 있다.Print("Hello");여기의 '조커 카드'가 '템플릿'이다.이 함수들을 보면 각각의 타입으로 만들어 진
다시 호출하다? 역으로 호출하다.게임을 만들 때 이런 콜백 개념이 자주 등장함.MoveTask실습등어떤 상황이 일어나면 -> 이 기능을 호출해줘UI스킬 버튼을 누르면 -> 스킬을 쓰는 함수를 호출해줘.함수 포인터 + 함수 객체 + 템플릿이런식으로 Item클래스가 있고이
Standard Template Library
capacity 지원 ㄴ => 당연함. 동적으로 할당하는데 어케 예상?임의 접근 지원 ㄴ => 당연함. 벡터와 유사하게 동작함.이런 remove와 같은 함수를 지원하는데왜? 벡터와 다르게 지원을 하냐?리스트에서는 에초에 이렇게 사용을 할려고 만든 자료구조 이기 때문에
vector, list 이거 둘다'Sequence Container' 라고 하는 것들이다.데이터가 삽입 순서대로 나열되는 형태vector : 동적 배열list : 이중 연결 리스트deque : double-ended queue 데크벡터와 리스트 중간지점. 자주쓰지는 않
Sequence 컨테이너가 아니라 연관 컨테이너로 넘어왔다.복사 비용이 일어날 수 있으니까 Player\* 로 들고있도록 하자.10만명 입장 -> 5만명 퇴장.중간 삽입/삭제가 비효율적이지만 일단 예로 이렇게 해보자.만약 아이디가 10000번인 플레이어를 찾는다 하면은
map의 형제들이다.키를 값으로 사용하고 싶을 때set사용한다.나머지는 map이랑 다 똑같다.거의 비슷하다.key == value를 인지하면됨.opeator \[] 지원 안함.map에서 중복키를 허용하는게 multimap이다.이렇게 넣으면되고, operator \[]
이렇게 일단 만들고number라는 숫자가 벡터에 체크하는 기능 (bool, 첫등장 iterator)11로 나뉘는 숫자가 벡터에 있는 체크하는 기능.홀수인 숫자의 개수는?벡터에 들어가 있는 숫자들에 3을 곱해주세요내가 알아야 하는 부분은 myIter에다가v.being()
이전시간에 문제 풀었던거가독성 ㅎㅌㅊ에 범용성 ㅎㅌㅊ인것을'알고리즘'을 통해 좀더 효율적으로 만들어보도록 하자.자료구조 : 데이터를 저장하는 구조vector, list, deque | map(AVL), set, mulitmap, multiset알고리즘 : 데이터를 가공
auto
C++11에서 초기화 하는 문법이 더 추가가됨.그런데 다른 C++11에서의 혁신적인 기능에 비해서 엄청 중요하지는 않음.Knight k3 {k1}; -> 복사 생성자() 이거 있는데 {} 왜 쓰냐??배열같은 경우 '{}'를 사용하여 초기화를 해주었었는데제각각 따로 ()
nullptr이 사실은 C++11에서 온것임.그러면 그전에 nullptr 표현을 어케 했노?=> 0 또는 NULL로 했음.(ㅈㄴ 오래된 책이나 그런거 보면)어떤 포인터를 타고갔을 때 아무것도 없으면 실제로 '0'이 들어가 있다.실제로 0이 들어가있다.옛날에는이렇게 표현
C++11 typedef 대신 사용할 수 있는 문법 'using'이런식으로 사용이 가능함.그런데 문제점이 있다.using은 '직관성'이 좋다.함수포인터의 경우typedef는 template을 사용할 수 없는 경우이다.using의 경우대문자 List는 std::list&
Scoped enumenum이랑 enum class의 장단점이 있다.enum class가 enum보다 가지는 장점.1) 이름 공간 관리 (scoped)2) 암묵적인 변환 금지 (장단점이 될 수 있음)enum의 경우 5, 6, 7또한 기본적으로 enum PlayerTyp
동적할당에서의 new delete가 아니라'삭제된 함수' 나타내는 delete이다.클래스가 제공하는 어떤 기능을 막고싶을 경우복사 연산자 막고싶을 경우이렇게하면 막힘.그런데 private이 무적은 아님.이렇게 friend class선언해주면Admin한테는 private
C가상함수와 연관있다.이런식으로 구현되어있다고 가정.이게 override 재정의 이다.오버로딩은이거임.나중에 상속받는 클래스가 많을 경우 이렇게 Player포인터로 받아서 사용할 수 있다.이상태로 실행하면 Plyaer->Attack이 호출됨.그래서다형성의 문제때문에이렇
C++11에서 가장가장 핵심적인 부분.이거 때문에 C++이랑 C++11이랑 속도 차이가 남.단일식을 넘어서 계속 지속되는 개체lvalue가 아닌 나머지(임시값, 열거형, 람다, i++ 등)이런식으로 오른쪽에서 사용할 수 있는 애들을 rvalue라고함.TestKnight
원래는 '보편 참조' (universal reference)\-> '전달 참조' (forwarding reference) C++17(거의 활용할 일이 없기는 한데 사용한다 서버에서)이렇게 일단 만들어 주도록 하자.이런식으로 막바로 안된다.k1은 왼값이기 때문에move로
존나 유용함.함수 객체를 빠르게 만드는 문법이런식으로 enum class, class가 있다고 가정을 해보도록 하자.그리고 벡터에 이 데이터들을 넣으면복습도 잡깐하자면 지금 오른값 참조로 데이터를 넣어주고있다.임시 객체이기 때문에...Lambda함수 객체를 손쉽게 만드
스마트 포인터 구현 -> 멀티 쓰레드 환경에서 잘 돌아가야함.아토믹 문법과 활용하게 된다.포인터 부터 얘기하자.이까지는 아름답게 동작을 한다.그런데 main에서 모든 기능들을 다 호출하지 않을 것이다.이곳 저곳에서 막 사용할 텐데k2가 접속종료를 함.이런상황인데 \_t
list를 직접 구현을 할 때C++는 기본연산자들을 제공을 하지만똥 + 똥, 똥 != 똥 과 같은 연산은 할 수 없다.그래서 우리가 이것을 "오버로딩"을 통해서 "재정의" 해주어야한다.재정의 하는 문법?은 알겠지만처음에 이런식으로 넣어서 이렇게 빨간줄 떳었음. 이유가
"정적"이라고 말해주는 키워드\_common은 func라는 헤더파일에 딱 붙어서 "정적"으로 있는 변수이다.( 데이터 영역은 프로그램이 시작하면 존재하고 종료될때 까지 계속 유지함 )C객체 = 속성 + 기능즉,속성 = 데이터, 기능 = 메소드객체 = 데이터 + 메소드이
initialize_list Constructor를 사용하는 이유?가령 vector의 경우, 초기화할 때 vector< int > v = {1,2,3,4,5,6,7,8};이런 식으로도 초기화가 가능합니다. 말 그대로push_back(1);... 을 8번 하는 것보
포인터를 알맞는 정책에 따라 관리하는 객체 (포인터를 매핑해서 사용)ref count를 두어서 누가 나를 기억을 하는지 체크를 하도록 하여"댕글링 포인터" double free와 같은 문제들을 방지한다.이거 왜 사용하나?shared_ptr은 cycle문제를 해결하지를
험수 객체를 빠르게 만드는 문법위랑 아래랑 같음.이거 자체도 객체로 만들어 질 수 있다.이렇게 객체를 만들 수 있음.이런 람다 객체를 "클로저 Closure" 라고함.람다에 의해 만들어진 실행시점 객체그리고 이전처럼 다시 이렇게 람다의 객체를 넣어주면 사용가능함.또는
원래는 보편 참조 universal reference로 불렸는데전달 참조 forwarding reference C++17에서 변경됨.오른값 참조 && 랑 햇갈릴 수 있어서 설명함.이렇게 바로 안되고오른값으로 캐스팅 해야함.std::move는 진짜 캐스팅 역할밖에 안한
임시객체를 Knight& knight로 받을 수 없다.사라질 녀석인데 TestKnight_LValueRef에서 수정하거나 할 수도 있기 때문에 => 좀 당연한 소리가 된다.반면에 const Knight& knight는 받을 수 있음. => 이것도 좀 당연하게 const
mem 조금 낭비하더라도 access를 위해 이렇게 padding을 넣는다.dynamic function binding프로그램이 실행될 때 함수가 binding된다는 것이다.반대로 static function binding Complie Tile에 바인딩 한다.그러면현
1) operator \* 의 반환부분을 T&로 하는거랑 T로 하는거랑 출력에는 차이가 없음.차이점이 뭔가?
반환 타입이 본인 클래스 내의 inner class의 경우typename을 항상 적어주어야한다.또한 inline은 생략해도 된다. 전부 헤더에 구현을 할경우
데이터는 이렇게이렇게 나뉜다.그래서 "이진 탐색 트리"를 구현하는 와중에https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C74tree-6지금 이렇게 막 물어보 했던 부분이포인터 변수도 "데이터"라 주소부분과 값 부분을 가진다