컴파일러, 운영체제, 상용 프로그램
특히 딥러닝 프레임워크는 모두 C++ 로 만들어져 있다.
프로그램의 성능이 중요한 부분에서 많이 쓰이고 있음
첫 C++ 프로그램
#include <iostream>
int main() {
std::cout << "Hello, world!!" << std::endl;
return 0;
}
1 : iostream 이란 헤더파일을 include 하고 있다.
iostream 헤더 파일은 C++ 에서 표준 입출력에 필요한 것들을 포함하고 있다.
3 : main 함수를 정의하는 부분
cout 앞의 std 는 C++ 표준 라이브러리의 모든 함수, 객체 등이 정의된 namespace 이다.
이는 말그대로 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일하다. 코드의 크기가 늘어나면서 중복된 이름을 가진 함수들이 많아지는데 C++ 에서는 이를 구분하기 위해, 같은 이름이라도, 소속된 이름 공간이 다르면 다른 것으로 취급하게 한다.
namespace header1 {
int foo();
void bar();
}
namespace header2 {
int foo();
void bar();
}
두 가지의 namespace 파일,
자기 자신이 포함되어 있는 namespace 안에서는 이를 명시하지 않고 자유롭게 부를 수 있다.
#include "header1.h"
namespace header1 {
int func(){
foo();
}
}
header1 namespace 안에서 foo 를 부른다면 알아서 header1::foo() 를 호출하게 된다.
여기서 header2 의 foo 를 호출하기 위해서는
#include "header1.h"
#include "header2.h"
namespace header1 {
int func(){
foo();
header2::foo();
}
}
반면 어떠한 namespace 에도 소속되지 않는 경우라면 명시적으로 name space 를 지정해야 한다.
기본적으로 header1 namespace 안에 정의된 모든 것들을 header1:: 없이 사용하고 싶다면
#include "header1.h"
#include "header2.h"
using namespace header1;
int main(){
foo();
bar();
}
위와 같이 using namespace header1 과 같이 명시하면 된다.
cout 과 endl 은 모두 iostream 헤더파일의 std 라는 이름 공간에 정의되어 있는 것들이다.
using namesopace std; 와 같이 name space 를 사용하겠다고 선언하는 것은 권장되지 않는다. 겹치는 이름의 함수로 인해 오류가 발생할 수 있기 때문,
cout 은 ostream 클래스의 객체로 표준 출력을 담당하고 있다.
이름 없는 이름 공간
C++ 에서는 이름 공간에 굳이 이름을 설정하지 않아도 된다.
이 경우 해당 이름 공간에 정의된 것들은 해당 파일 안에서만 접근할 ㅜㅅ 있게 된다.
#include <iostream>
namespace{
int OnlyInThisFile(){}
int only_in_this_file = 0;
int main(){
OnlyInThisFile();
only_in_this_file = 3;
}
}
'C++' 카테고리의 다른 글
4.2 함수의 오버로딩, 생성자 (0) | 2024.06.29 |
---|---|
4. 객체 (0) | 2024.06.16 |
3. new, delete (0) | 2024.06.15 |
2. 참조 (1) | 2024.06.15 |
1.2 C 와 C++ (기본 문법 비교) (0) | 2024.06.15 |