Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++에서 정적, 자동, 전역 및 지역 변수의 차이점 완벽 정리

    C++에서 변수를 이해하려면 서로 다른 두 가지 개념을 구분해야 합니다. 범위(Scope): 이름에 접근할 수 있는 위치를 결정합니다 — 전역(global)과 지역(local) 저장 기간(Storage Duration): 변수가 언제 생성되고 소멸되는지를 결정합니다 — 정적(static)과 자동(auto) 범위(Scope) 지역 변수는 해당 함수나 코드 블록 내부의 문장에서만 사용할 수 있습니다. 지역 변수는 그 자체만으로는 다른 함수에서 알 수 없습니다. 예제 #include <iostream> using name

  2. C++ 변수 범위(Scope)의 이해: 지역 변수와 전역 변수 완벽 정리

    프로그래밍에서 범위(scope)란 프로그램 내에서 변수가 유효하게 사용될 수 있는 영역을 의미합니다. C++에서는 크게 세 가지 위치에 변수를 선언할 수 있습니다.지역 변수(Local Variables) — 함수 또는 블록({}) 내부에 선언된 변수형식 매개변수(Formal Parameters) — 함수의 매개변수 정의 부분에 선언된 변수전역 변수(Global Variables) — 모든 함수 외부에 선언된 변수지역 변수(Local Variables)지역 변수는 해당 변수가 선언된 함수나 코드 블록 내부의 문장에서만 사용할 수 있습

  3. C++ 변수 완벽 가이드: 자료형과 스코프(변수 범위) 이해하기

    C++ 변수란 무엇인가?C++에서 모든 변수는 고유한 자료형(type)을 가집니다. 이 자료형은 다음 세 가지를 결정하는 핵심 요소입니다.변수가 차지하는 메모리의 크기와 배치 방식해당 메모리에 저장할 수 있는 값의 범위변수에 적용할 수 있는 연산의 종류C++에서 변수는 다음과 같은 형식으로 선언합니다.type variableName;여기서 자료형은 int, bool, float, char 같은 기본형(primitive type)일 수도 있고, 열거형(enum), 다른 타입을 가리키는 포인터(pointer), 또는 구조체나 클래스로

  4. 인텔 C++ 컴파일러가 지원하는 C++11 기능 완벽 가이드

    인텔(Intel)은 자사의 C++ 컴파일러가 지원하는 C++11 기능에 대한 공식 가이드 문서를 제공하고 있습니다. 인텔 C++ 컴파일러를 사용해 최신 표준 기반의 코드를 개발하려는 개발자라면, 이 공식 문서를 통해 어떤 C++11 기능이 어느 버전부터 지원되는지 정확하게 확인할 수 있습니다. 공식 문서 확인 방법 인텔이 지원하는 C++11 기능 목록은 아래 공식 문서 페이지에서 확인할 수 있습니다. 👉 C++11(C0x) Features Supported by Intel C++ Compiler – Intel 공식 문서 주요 지원

  5. C++ 학습에 최적화된 베스트 도서와 온라인 가이드 총정리

    인터넷에는 C++을 배우는 데 도움이 되는 자료가 무수히 많습니다. 그중에서도 검증된 품질을 갖춘 최고의 학습 리소스들을 엄선하여 정리해 보았습니다. 1. 튜토리얼스포인트(TutorialsPoint) C++ 강좌 tutorialspoint.com/cplusplus는 C++의 기초부터 중급 주제까지 거의 모든 내용을 깊이 있게 다루는 훌륭한 온라인 학습 사이트입니다. 체계적인 목차 구성 덕분에 처음 접하는 사람도 부담 없이 따라갈 수 있으며, 전반적으로 C++ 입문용으로 손꼽히는 무료 자료입니다. 2. A Tour of C++ (비야

  6. C++ 독학을 위한 최고의 온라인 튜토리얼 및 학습 자료 총정리

    인터넷에는 C++를 배우는 데 도움이 되는 방대한 자료가 넘쳐납니다. 하지만 그 많은 자료 중에서 어떤 것을 선택해야 할지 막막하게 느껴질 수 있습니다. 이 글에서는 초보자부터 경험 많은 개발자까지 모두에게 유용한, 검증된 최고의 C++ 학습 자료들을 엄선하여 소개해 드립니다.1. Tutorialspoint C++ 튜토리얼Tutorialspoint는 C++ 학습을 시작하기에 가장 좋은 곳 중 하나입니다. 기초 문법부터 중급 개념까지 거의 모든 주제를 깊이 있고 체계적으로 다루고 있어, 전반적인 C++ 학습 로드맵을 잡기에 매우 훌륭

  7. C++ '정의되지 않은 참조/확인되지 않은 외부 기호' 오류란 무엇이며 어떻게 해결할까?

    C++ 정의되지 않은 참조(undefined reference) 오류란?이름에서 알 수 있듯이, 이 오류는 선언만 하고 실제로 정의하지 않은 기호(함수나 변수)가 존재할 때 발생하는 링커(linker) 오류입니다. 코드는 컴파일 단계를 통과했지만, 링커가 해당 기호의 실제 구현체를 찾지 못해 최종 실행 파일을 만들지 못하는 상황이라고 이해하면 됩니다.발생 원인은 매우 다양하지만, 가장 흔히 나타나는 세 가지 경우를 살펴보겠습니다.1. 선언한 이름의 정의를 잊어버린 경우예를 들어 함수를 선언해 두고 다른 곳에서 호출했지만, 정작 함수

  8. C++에서 '&' 기호의 용도는 무엇일까?

    C++에서 & 기호는 연산자로 사용되며, 크게 두 가지 상황에서 쓰입니다. 하나는 비트별 AND(Bitwise AND) 연산자이고, 다른 하나는 주소 연산자(Address-of Operator)입니다.비트별 AND (Bitwise AND)비트별 AND 연산자(&)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 같은 자리 비트와 비교합니다. 두 비트가 모두 1이면 결과 비트는 1로 설정되고, 그렇지 않으면 0으로 설정됩니다. 이때 비트별 AND 연산자의 양쪽 피연산자는 반드시 정수 계열(integral type)이어야 합

  9. C++ 객체 지향 프로그래밍 입문 가이드: 핵심 개념부터 시작하기

    C++ 객체 지향 프로그래밍이란? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 객체라는 개념을 기반으로 하는 프로그래밍 패러다임입니다. 객체는 속성(attribute) 형태의 데이터와 메서드(method) 형태의 동작 명령을 함께 담을 수 있습니다. 예를 들어 사람은 하나의 객체로 볼 수 있습니다. 사람은 키, 성별, 나이 같은 속성(데이터)을 가지며, 걷기(move), 말하기(talk) 같은 메서드(동작)도 수행할 수 있습니다. 객체(Object) 객체는 객체 지향 프로그래밍의 기본 단위입

  10. C++ 템플릿은 왜 헤더 파일에서만 구현할 수 있을까?

    C++ 템플릿이 헤더 파일에 구현되어야 하는 이유C++에서 템플릿(template)은 일반적인 클래스나 함수와는 다르게 동작합니다. 템플릿을 인스턴스화하면 컴파일러는 전달된 타입 인자를 기반으로 새로운 클래스를 직접 생성합니다. 즉, 템플릿 코드 안의 템플릿 매개변수 자리가 실제 사용된 타입으로 모두 치환된 클래스가 만들어지는 것입니다.예를 들어 다음과 같은 템플릿 클래스가 있다고 가정해 보겠습니다.template<typename T> class MyClass {    T foo;&nb

  11. C++의 3의 법칙(Rule of Three)이란 무엇일까?

    C++의 3의 법칙(Rule of Three)이란?3의 법칙은 C++ 프로그래밍에서 널리 통용되는 경험 법칙(rule of thumb)이자 좋은 코딩 습관을 담은 원칙입니다. 이 법칙에 따르면, 클래스에서 다음 세 가지 중 하나라도 명시적으로 정의해야 한다면, 나머지 두 가지도 함께 정의하는 것이 바람직합니다.복사 생성자(copy constructor)복사 대입 연산자(copy assignment operator)소멸자(destructor)왜 세 가지가 모두 필요할까?그 이유는 간단합니다. 이 세 가지 중 하나라도 직접 정의해야 하

  12. C++ 반복문 조건에서 eof()를 사용하면 안 되는 이유

    C++에서 파일을 읽을 때 stream.eof()를 반복문 조건으로 사용하는 코드를 종종 볼 수 있습니다. 하지만 이 방식은 잘못된 패턴으로 간주됩니다. 핵심 이유는 간단합니다. 아직 EOF(파일 끝)에 도달하지 않았다고 해서 다음 읽기가 반드시 성공하는 것은 아니기 때문입니다. eof() 검사의 문제점 ifstream 같은 파일 스트림으로 파일을 읽는 상황을 생각해 봅시다. 반복문에서 myFile.eof()를 조건으로 검사하면, 이는 이미 파일 끝에 도달했는가?라는 질문일 뿐입니다. 즉, 읽기 시도가 실제로 실패한 후에야 eof

  13. C++에서 'using namespace std'가 나쁜 습관으로 간주되는 이유

    C++을 배우기 시작하면 수없이 접하게 되는 코드 한 줄이 있습니다. 바로 using namespace std;입니다. 교재나 튜토리얼 예제에서는 흔히 볼 수 있지만, 실무에서는 이 문장이 나쁜 습관으로 꼽히곤 합니다. 그 이유를 제대로 이해하려면 먼저 네임스페이스(namespace)가 왜 존재하는지부터 알아야 합니다.std 네임스페이스란 무엇인가?C++에는 컨테이너(vector, map 등), 알고리즘(sort, find 등), 입출력 스트림처럼 애플리케이션 개발에 자주 쓰이는 기능들을 모아둔 표준 라이브러리가 있습니다. 표준 라

  14. C/C++에서 지역 변수의 메모리에 범위(Scope) 밖에서 접근할 수 있을까?

    C/C++에서는 지역 변수의 메모리에 범위(scope) 밖에서도 접근할 수 있을 가능성이 있습니다. 이번 글에서는 이러한 현상이 발생하는 예제와 그 원리, 그리고 숨겨진 위험성까지 자세히 살펴보겠습니다.예제 코드다음은 지역 변수의 주소를 함수 밖으로 반환하는 코드입니다.#include<iostream> using namespace std; int* foo() { int x = 3; return &x; // 지역 변수의 주소를 반환 } int main() { int* address = f

  15. C++ 식별자에서 밑줄(_) 사용 규칙 완벽 정리

    C++ 식별자에서 밑줄(_) 사용 규칙이란?C++에서 변수명이나 함수명 같은 식별자를 지을 때 밑줄을 어디에, 어떻게 사용할 수 있는지 정확히 알고 있어야 컴파일러나 표준 라이브러리와의 충돌을 피할 수 있습니다. MSDN 공식 문서에 따르면 다음과 같은 규칙이 적용됩니다.구현체(컴파일러)를 위해 예약된 이름식별자가 연속된 두 개의 밑줄(__)로 시작하거나, 밑줄 하나 뒤에 대문자가 이어지는 형태(예: _Foo)라면 모든 범위(scope)에서 C++ 구현체(implementation)를 위해 예약되어 있습니다. 즉, 개발자가 직접 사

  16. C++와 Java의 객체 슬라이싱(Object Slicing)이란? 개념과 예제로 쉽게 이해하기

    객체 슬라이싱(Object Slicing)이란?객체 슬라이싱은 파생 클래스(자식 클래스)의 객체를 기반 클래스(부모 클래스)의 인스턴스에 할당할 때 발생하는 현상을 말합니다. 이 과정에서 파생 클래스가 가지고 있던 메서드나 멤버 변수들이 사라지게 되는데, 마치 정보가 잘려 나간(slice away) 것처럼 표현되어 객체 슬라이싱이라는 이름이 붙었습니다.구체적인 예시를 통해 살펴보겠습니다. class Foo { int a; }; class Bar : public Foo { int b; }; 위 코드에서 Bar는 Foo를 상

  17. C/C++ 문자열의 단어를 반복 처리하는 가장 우아한 방법

    C/C++ 문자열의 단어를 반복(iterate)하는 데 딱 하나의 우아한 방법이 존재하지는 않습니다. 어떤 개발자에게는 가독성이 높은 코드가 가장 우아한 방법일 수 있고, 또 다른 개발자에게는 실행 성능이 뛰어난 코드가 더 우아하다고 여겨질 수 있기 때문입니다.이 글에서는 C/C++ 문자열의 단어를 순회할 때 활용할 수 있는 대표적인 두 가지 방법을 소개합니다.1. stringstream으로 공백 기준 단어 읽기첫 번째 방법은 stringstream을 사용하여 공백으로 구분된 단어를 하나씩 읽어오는 것입니다. 이 방식은 다소 단순하

  18. Linux에서 C++ 코드를 프로파일링하는 방법 완벽 가이드

    Linux 환경에서 C++ 프로그램의 성능을 분석하고 병목 지점을 찾고 싶다면 프로파일링(Profiling) 도구를 활용하는 것이 가장 효과적입니다. 다행히 Linux에는 강력한 오픈소스 프로파일링 도구가 다양하게 존재합니다. 이 글에서는 가장 널리 사용되는 대표적인 도구들을 소개하고, 실제 사용 방법을 단계별로 살펴보겠습니다.1. Valgrind와 Callgrind 활용하기Linux에서 가장 폭넓게 사용되는 프로파일링 도구는 단연 Valgrind입니다. Valgrind는 메모리 디버깅, 메모리 누수 탐지뿐만 아니라 성능 프로파일링

  19. C++ 복사-교환(Copy-and-Swap) 관용구 완벽 정리

    복사-교환 관용구란 무엇인가? 객체의 대입(assignment) 작업은 크게 두 단계로 이루어집니다. 첫 번째는 객체가 가진 기존 상태를 해제하는 것이고, 두 번째는 그 자리에 새로운 상태를 구축하는 것입니다. 전자에는 소멸자(destructor)가 사용되고, 후자에는 복사 생성자(copy constructor)가 활용됩니다. 각각을 따로 구현하는 것은 비교적 간단하지만, 대입 연산자를 오버로딩할 때는 예외 안전성까지 고려해야 하므로 구현이 상당히 까다로워질 수 있습니다. 바로 이러한 어려움을 우아하게 해결해 주는 방법이 복사-교환

  20. C와 C++에서 main() 함수는 무엇을 반환해야 할까?

    main() 반환 값의 의미main() 함수의 반환 값은 프로그램이 어떤 방식으로 종료되었는지를 운영체제나 호출 환경에 알려주는 역할을 합니다.프로그램이 정상적으로 실행을 마쳤다면 0을 반환합니다. 반대로 오류, 잘못된 입력, 세그먼테이션 폴트(segmentation fault) 등 비정상적인 종료가 발생했을 때는 일반적으로 0이 아닌 값(non-zero)을 반환합니다.다만 0이 아닌 코드들이 구체적으로 어떻게 해석되어야 하는지에 대한 표준 규격은 존재하지 않습니다. 각 환경마다 해석 방식이 다를 수 있다는 점을 기억해 두는 것이

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:11/300  20-컴퓨터/Page Goto:1 5 6 7 8 9 10 11 12 13 14 15 16 17