일부 웹 사이트에서는 문자열 유형이 스칼라라고 주장합니다. 필자가 이해 하듯이 스칼라는 배열 유형과는 달리 단일 값 유형입니다. 그러나 문자열은 기본적으로 문자 배열이 아닙니다. 왜 스칼라일까요?문자열 유형이 스칼라인지, 그렇다면 왜?
EDIT : 대답/설명이 C에서 C++로 다른 경우 설명을 두 언어로 모두 포함하고 싶습니다. 이 질문에 C++ 태그를 추가하고 있습니다.
일부 웹 사이트에서는 문자열 유형이 스칼라라고 주장합니다. 필자가 이해 하듯이 스칼라는 배열 유형과는 달리 단일 값 유형입니다. 그러나 문자열은 기본적으로 문자 배열이 아닙니다. 왜 스칼라일까요?문자열 유형이 스칼라인지, 그렇다면 왜?
EDIT : 대답/설명이 C에서 C++로 다른 경우 설명을 두 언어로 모두 포함하고 싶습니다. 이 질문에 C++ 태그를 추가하고 있습니다.
char*
및 const char*
은 스칼라 유형이며, char[n]
및 const char[n]
은 스칼라 유형입니다. 회원 유형, std::nullptr_t
, 이러한 유형의 이력서 자격을 갖춘 버전
산술 타입, 열거 타입, 포인터 타입, 포인터가 공동으로 스칼라 유형이라고합니다. (3.9 유형 [기본 유형] §9)
일반적으로 모든 기본 원시 데이터 유형은 스칼라로 간주됩니다.
그러나 C++에는 언어의 일부인 STL이 있으므로 문자열 (문자 배열 아님)을 스칼라 유형으로 간주 할 수 있습니다.
(C에서 문자열의 정의는 본질적으로 스칼라 char 유형의 배열이기 때문에) C에서 문자열 프리미티브가 없으므로 모두 어떻게 보느냐에 따라 달라집니다.
"스칼라 유형"의 개념은 C++에 매우 한정적입니다. 편집을 참조하십시오. – fredoverflow
C에서 문자열은 데이터 형식이며 형식이 아닙니다. C 문자열은 배열 N+1
이 char
인데 여기서 N
은 문자열의 길이입니다. 배열 유형은 스칼라 유형의 일부가 아니며 집계 유형의 일부입니다.
또한 C++에는 클래스 유형이지만 스칼라 유형의 일부가 아닌 유형이 있습니다.
스칼라와 집계 유형의 차이는 퍼지입니다. 32 비트 정수도 32 비트의 컨테이너입니다. 문자열은 엄밀히 말하면 문자 집합체이지만 스칼라를 조작 할 때 종종 조작합니다. 우리는 그것들을 불변으로 취급하고, 그것들을 비교하고, 인자로 전달합니다. C에서는 문자열의 집합적인 성격이 더 뚜렷 합니다만, C++을 포함한 다른 많은 언어가 스칼라처럼 느껴집니다.
퍼지의 다른 예는 복소수와 3D 벡터입니다. 그것들은 실제로 여러개의 doubles
으로 구성되어 있지만 수치 프로그램은 여전히 스택에 값을 할당하고, 값으로 전달하고, 스칼라 연산자를 오버로드하는 등의 작업을합니다.
문맥에 대한 참조를주십시오. 기술적으로 C는 문자열 타입을 가지고 있지 않습니다. – Jon