C++
| 주의. 이 문서는 공머생들이 좋아하는 주제 혹은 공머생 그 자체에 대해 다룹니다. 본 문서가 다루는 내용에 지나치게 탐닉할 경우 필연적으로 여성들과 멀어지게 됩니다. 이는 디시위키가 책임지지 않습니다. |
C언어의 확장팩...이였던 시절도 있었으나 지금은 C언어와는 완전히 다른 언어라고 봐도 좋을정도로 바뀌었다.
c와의 차이점
c랑 c++이 헷갈린 중생들을 위한 특징을 정리하자
class 지원
c++에서는
class Abc {
int a, b, c;
void k() { a = b+c; }
};
Abc abc[1000];
for (int i = 0; i < 1000; i++) abc[i].k();
이렇게 쓸수 있는걸 c에서는
void k(int &a, int b, int c) { a = b + c; }
int a[1000], b[1000], c[1000];
for (int i = 0; i < 1000; i++) k(a, b, c);
이렇게 써야 한다 좆같다
typedef struct Abc
{
int a, b, c;
}Abc;
void k(Abc* abc) { abc->a = abc->b + abc->c; }
Abc abc[1000];
for (int i = 0; i < 1000; i++) k(&abc[i]);
이렇게 할수있어 병신아
operator overriding 지원
c++에서는
class Abc {
int a,b,c;
Abc& operator+(Abc& m) { a+=m.a; b+=m.b; c+=m.c; return *this; }
};
Abc a, b, c;
c = a + b;
이렇게 쓸수 있는걸 c에서는
int a1, b1, c1;
int a2, b2, c2;
int a3, b3, c3;
a3 = a1 + a2;
b3 = b1 + b2;
c3 = c1 + c2;
이렇게 써야 한다 좆같다
template 지원
쉽게 말해서 이게 지원 안되면 stl 라이브러리를 죄다 쓸 수 없다
Rvalue reference 지원
int&& sum(int a, int b)
{
return a + b;
}
int main()
{
int&& r = sum(1, 2);
cout << r << endl;
return 0;
}
여기서 니가 int &sum이라고 썼으면 a+b의 값은 sum 함수가 실행끝난순간 스택이 터져부러서 없어졌기 때문에 프로그램도 같이 펑 터지고 말 것이다 즉 좀더 스마-트하게 스택을 살려둔다
컴공과인데 스택도 모르면 어디가서 컴공과라고 하지마라 제발
또 뭐있냐? 아 몰랑 니가 직접 찾아봐
특징
프로그래밍 업계에 자주 쓰이는 언어들 중에서 가장 난이도가 높다.
비교적 로우레벨 언어다보니 최적화가 잘 된다. 게임 개발, 애플리케이션 개발에 많이 쓰인다.
라이브러리 의존성이 개좆같다. 파이썬은 pip Rust는 cargo 심지어 vim도 Vundle랍시고 패키지관리자가 있는데 c++는 그런거 없고 매번 직접 다 컴파일해야한다. 리눅스쯤 되면 apt에서 dev붙은 라이브러리로 어떻게 제공해주긴 하지만 ...
이런 좆같은 라이브러리 의존성을 해소하고 독립적인 관리자를 제공할뿐만아니라 기존의 좆같은 c++의 문법구조대신 scheme기반의 문법구조를 쓰는 Rust쓰자 쓰는 사람도 아직 몇 없어서 있어보인다
점유율
Python, C#처럼 C++보다 더 쉬운 언어들이 널리 쓰이기 시작하면서
해마다 점유율이 떨어져 가고있다. 그래도 여전히 자주 쓰이는 언어 3위이다.
참고로 2016년 1월 현재 점유율 1위는 Java, 2위는 C언어이다.
Hello, world 출력
새로운 언어를 배울 때 가장 기초적인 문법을 제대로 배웠는지 이해하는 차원에서 한번씩 짜보는 프로그램이다. 이 글을 읽는 너도 한번 이 코드를 짜고 이해해 보자.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
char Pieces[16] = {'H', 'e', 'l', 'o', ',', ' ', 'W', 'r', 'd', '!'};
vector<bool> Bits;
string HelloWorld = "0000000100100010001101000101011000110111001010001001";
for(unsigned long i = 0; i < HelloWorld.length(); ++i)
{
Bits.push_back(bool(HelloWorld[i] - '0'));
}
for(unsigned long i = 0; i < Bits.size() / 4; ++i)
{
char SemiByte = Bits[i * 4 + 3] + Bits[i * 4 + 2] * 2 + Bits[i * 4 + 1] * 4 + Bits[i * 4] * 8;
cout << Pieces[SemiByte];
}
}
//ㄴ 저게 어떻게 기초적인 문법이냐
그냥 간단하게 짜자
누가 저따위로 메모리를 낭비함
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hello World!" << endl;
}
더 간단하게
iostream 개쓰레기
#include <stdio.h>
//.h를 극혐한다면 cstdio를 써도 됨
int main()
{
printf("Hello World!\n");
return 0;
}
숏코딩
짧게 코딩하는 것을 숏코딩이라 한다.
#import<cstdio>
main(){puts("Hello world");}