본문으로 이동

C++: 두 판 사이의 차이

K-위키
9번째 줄: 9번째 줄:
===class 지원===
===class 지원===


c에서는
c++에서는


<source lang="cpp">
<source lang="cpp">

2016년 5월 31일 (화) 09:24 판

주의. 이 문서는 공머생들이 좋아하는 주제 혹은 공머생 그 자체에 대해 다룹니다.
본 문서가 다루는 내용에 지나치게 탐닉할 경우 필연적으로 여성들과 멀어지게 됩니다.
이는 디시위키가 책임지지 않습니다.

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();

이렇게 쓸수 있는걸

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);

이렇게 써야 한다 좆같다

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;

이렇게 쓸수 있는걸

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;
}