2016-10-22 1 views
0

Java는 앞서 언급 한 오류를 식별합니다. 즉, NullPointerExceptionArrayOutOfBound은 C++과 다릅니다 (g ++). 언제 어떻게 C++의 std::string이 이러한 오류를 일으킬 수 있습니까? C++에서 이러한 오류를 어떻게 처리합니까? (예 : 런타임 오류, JAVA)?문자열로 인해 C++에서 NullPointerException 또는 ArrayOutOfBound 인덱스와 유사한 오류가 발생할 수 있습니까?

+0

물론 C++ 프로그램은 Java에서 정의한 오류를 트리거 할 수 없습니다. 내가 그 질문을 이해하는지 모르겠다. –

+0

@IgorTandetnik : 나는 그 질문을 이해하기가 어렵지 않습니다. OP는 독자 분 께서 일정한 상식을 지킵니다. –

+0

@IgorTandetnik 예, 알고 있습니다. C++'std :: string'에서 앞서 언급 한 오류가 어떤 방법으로 발생할 수 있는지 알고 싶었습니다. –

답변

0

C++ 모음은 범위를 벗어난 인덱스에 대해 throw되도록 보장 된 확인 된 인덱싱을위한 방법 인 at을 제공합니다.

보통 [] 색인 생성은 범위를 벗어난 색인에 대해 정의되지 않은 동작을 제공하는 것으로 보장 할 수 없지만 색인 검사를 지원하는 구현에서는 디버깅 및 테스트가 더 편리 할 수 ​​있습니다.

따라서 C++에는 nullpointers에 대한 확인 된 핵심 언어가 제공되지 않습니다. typeid 표현식을 제외하고는 nullpointer를 Dereferencing하면 정의되지 않은 동작 만 있습니다. 이것은 C++ 설계의 주된 원칙은 사용하지 않는 것에 대해 비용을 지불하지 말아야한다는 것이며, 일반적으로 C++에서는 코드를 값 비싼 검사없이 풀 스로틀로 실행하기를 원하기 때문입니다.

string 기능 ”은 C++이지만 표준 라이브러리에서 제공하는 std::string 유형이 있습니다.

nullpointer를 인수로 사용하여 std::string을 초기화 할 수 있으며 정의되지 않은 동작이 발생합니다. 즉, 여기서도 nullpointer 검사가 보장되지 않습니다. 핵심 언어 제공 검사와 대조적으로, 이것은 틀림없이 감시 유형의 설계 오류입니다. 단지 의미가 없습니다.

+0

문자열, 요소에 대한 포인터, 배열에 대한 포인터 또는 사용자가 제공하기로 계약 한 것 대신에 nullpointer를 제공하여 거짓말해서는 안되는 곳이 있습니다. 왜 cstring에 대한 std :: string ctor가 특별한 경우인지를 추가 할 수 있습니다. – Deduplicator

+0

@ Cheers 및 hth. 고마워. 문자열이 null로 초기화되는 곳을 제외하고 간단한 인스턴스를 명시 할 수 있습니까? std :: string 연산은 코딩시 'NullPointerException'및 'ArrayOutOfBound'와 동일한 오류를 생성 할 수 있습니다. –

+0

@KomalJoshi : 대답의 첫 번째 문장에서 한 사례가 언급되었습니다. nullpointer로'std :: string'을 초기화하는 것은 그런 경우가 아닙니다 (불행히도). 그냥 UB 일 뿐이야. –

관련 문제