2012-04-18 4 views
2

일부 웹 사이트에서는 문자열 유형이 스칼라라고 주장합니다. 필자가 이해 하듯이 스칼라는 배열 유형과는 달리 단일 값 유형입니다. 그러나 문자열은 기본적으로 문자 배열이 아닙니다. 왜 스칼라일까요?문자열 유형이 스칼라인지, 그렇다면 왜?

EDIT : 대답/설명이 C에서 C++로 다른 경우 설명을 두 언어로 모두 포함하고 싶습니다. 이 질문에 C++ 태그를 추가하고 있습니다.

+6

문맥에 대한 참조를주십시오. 기술적으로 C는 문자열 타입을 가지고 있지 않습니다. – Jon

답변

5

char*const char*은 스칼라 유형이며, char[n]const char[n]은 스칼라 유형입니다. 회원 유형, std::nullptr_t, 이러한 유형의 이력서 자격을 갖춘 버전

산술 타입, 열거 타입, 포인터 타입, 포인터가 공동으로 스칼라 유형이라고합니다. (3.9 유형 [기본 유형] §9)

0

일반적으로 모든 기본 원시 데이터 유형은 스칼라로 간주됩니다.

그러나 C++에는 언어의 일부인 STL이 있으므로 문자열 (문자 배열 아님)을 스칼라 유형으로 간주 할 수 있습니다.

(C에서 문자열의 정의는 본질적으로 스칼라 char 유형의 배열이기 때문에) C에서 문자열 프리미티브가 없으므로 모두 어떻게 보느냐에 따라 달라집니다.

+0

"스칼라 유형"의 개념은 C++에 매우 한정적입니다. 편집을 참조하십시오. – fredoverflow

0

C에서 문자열은 데이터 형식이며 형식이 아닙니다. C 문자열은 배열 N+1char인데 여기서 N은 문자열의 길이입니다. 배열 유형은 스칼라 유형의 일부가 아니며 집계 유형의 일부입니다.

또한 C++에는 클래스 유형이지만 스칼라 유형의 일부가 아닌 유형이 있습니다.

3

스칼라와 집계 유형의 차이는 퍼지입니다. 32 비트 정수도 32 비트의 컨테이너입니다. 문자열은 엄밀히 말하면 문자 집합체이지만 스칼라를 조작 할 때 종종 조작합니다. 우리는 그것들을 불변으로 취급하고, 그것들을 비교하고, 인자로 전달합니다. C에서는 문자열의 집합적인 성격이 더 뚜렷 합니다만, C++을 포함한 다른 많은 언어가 스칼라처럼 느껴집니다.

퍼지의 다른 예는 복소수와 3D 벡터입니다. 그것들은 실제로 여러개의 doubles으로 구성되어 있지만 수치 프로그램은 여전히 ​​스택에 값을 할당하고, 값으로 전달하고, 스칼라 연산자를 오버로드하는 등의 작업을합니다.