C 프로그래머를 불안하게 만드는 C ++에 관한 것들
후드 아래에서 많은 마술이 일어나고 있습니다. 생성자, 소멸자, 가상 메서드, 템플릿 등은 C ++ 코드를 동등한 C 코드보다 훨씬 쉽고 빠르게 작성할 수 있지만 이해하고 추론하기는 어렵습니다 (C ++ 및 관련 규칙을 얼마나 잘 알고 있는지에 따라 다름). 클래스의 생성자 (그리고 그 클래스가 의존하는 클래스)가 어떻게 정의 되어 있는지에 따라 많은 코드를 Foo newFoo;
호출 할 수있는 간단한 것이 있습니다. postfix는 종종 값 비싼 복사 작업을 포함하기 때문에 컨테이너를 반복 할 때 대신에 규칙을 작성 해야하는 이유이기도합니다 . Foo
++it
it++
++
수행중인 작업에 따라 특히 간단한 작업의 경우 약간의 오버 헤드 가 발생할 수 있습니다. 다음 두 프로그램을 수행하십시오. 첫 번째는 C, 두 번째는 C ++입니다.
/* C version */
#include <stdio.h>
int main(void)
{
char greeting[] = "Hello, world";
printf("%s\n", greeting);
return 0;
}
/* end C version */
/* C++ version */
#include <iostream>
#include <string>
int main(void)
{
std::string greeting("Hello, world");
std::cout << greeting << std::endl;
return 0;
}
/* end C++ version */
동일한 동작, 소스 측면에서 많은 차이는 없지만 gcc 4.1.2로 작업하는 SLES 10 상자에서 전자는 ~ 9kb의 실행 파일을 생성하지만 두 번째는 12.5kb를 넘습니다 (최적화는 수행하지 않음) ), 거의 28 % 더 큽니다. C ++ string
유형은 C 문자열 라이브러리보다 IMO로 작업하기가 훨씬 쉽고 C ++ 스트림은 C 스트림보다 훨씬 유연하고 사용자 정의가 가능하지만 실제로 이와 같은 뇌 죽은 코드의 경우 오버 헤드 가치 가 없을 수 있습니다.
C ++는 C 와 비교할 때 엄청나게 복잡한 의미를 가진 거대한 언어입니다. C보다 C ++에 능숙 해지는 데 시간이 더 오래 걸립니다. 즉, C ++를 알고 있다고 주장하는 많은 사람들은 자신이 생각하는 것만 큼 잘 알지 못한다는 것을 의미합니다.
C ++ 프로그래머를 불안하게 만드는 C에 관한 것들
C는 상상력의 확장에 의한 안전한 프로그래밍 언어가 아닙니다. 배열에 검사를 더 경계는 (지금은 죽은 사람을 통해 일 악용 행동을 많이로 연결하지 gets
, 또는 통해 기능 scanf
로 %s
및 %[
변환 지정자). C ++은 최소한 현재 정의 된 범위 밖에서 액세스하려고하면 예외를 발생시키는 컨테이너를 제공합니다. C가 제공하는 모든 것은 운이 좋으면 분할 위반입니다.
C의 메모리 관리는 C ++이 제공하는 도구와 비교할 때 매우 노동 집약적이며 오류가 발생하기 쉽습니다. 자신의 컨테이너를 빌드하는 경우 모든 malloc
및 free
호출 을 일치 시키고 할당이 성공했는지 확인하고 오류가 발생할 경우 부분 할당을 철회해야합니다. C ++에서는 항목을 용기에서 품목을 제거하십시오. 문제가 있으면 예외가 발생합니다.
마찬가지로 C에서 오류 처리는 C ++에서 제공하는 도구 (예 : 예외)와 비교할 때 문제가 많습니다. 정말 재미있는 것은 많은 메모리를 할당 한 다음 처리 과정에서 벽을 치는 경우입니다. 취소해야 할 때 올바른 순서로 해당 메모리를 해제해야합니다. C ++ 및 RAII 원칙을 사용하면 비교적 비교적 쉽습니다.
그렇다면 언제 다른 것을 사용합니까?
작성중인 내용이 간단하다면 입력 및 출력 과 성능 문제에 대해 명확하게 설명 할 수있는 응용 프로그램을 읽고 / 제거하고 응용 프로그램을 제거하십시오 .C ++보다 C를 선호하십시오. 그렇지 않으면 C ++을 선호하십시오.