Overloading
-
[overloading] operator <<개발/C·C++ 2021. 7. 28. 14:17
참고 C++ draft 연산자 오버로딩에 적용되는 규칙이 있습니다. 규칙과 관련해서 예제 몇 개를 작성해보겠습니다. Expression @a as member function #include class Position { private: int x; int y; public: Position() = default; Position(int x, int y) :x(x), y(y) {} Position operator-() const { return Position{ -x, -y }; } void print() const { std::cout
-
[Name mangling/Name decoration] 유일한 이름을 위해개발/C·C++ 2021. 4. 19. 15:57
extern "C" { extern "C++" { void func(); } } Name mangling은 C++에만 있습니다. C++에서 Name mangling이 필요한 이유는 여러 namespace, module, class 등에서 사용된 같은 이름(함수, 변수 등)을 고유하게 만들어주기 위해서입니다. Name mangling 덕에 C++에서 함수 오버로딩도 가능한 것입니다. 링커가 오브젝트 파일들은 연결할 때 Name mangling을 통해 필요한 엔티티를 이어줍니다. 즉 Name mangling은 컴파일 단계에서 이루어집니다. 아래와 같은 함수 선언부가 있을 때, int f (void) { return 1; } int f (int) { return 0; } void g (void) { int i..