2011-11-11 2 views
6

Occasionaly, 내 프로그램 코드 한 곳에서 오타를 만들었습니다.둥근 괄호로 배열을 초기화 할 수 있습니까?

int a = 10; 
char* b = new char(a); 

오류가 분명합니다 : [] 대신 쓰여졌습니다. 이상한 것은 ... 컴파일 된 코드입니다. 디버거에서 실행되었습니다. 그러나 디버거 외부에서 컴파일 된 .exe는이 줄이있는 함수가 실행 된 후 잠시 추락했습니다.

두 번째 코드 행은 실제로 합법적입니까? 그리고 그렇다면 컴파일러는 무엇을 의미합니까?

답변

10

수치가 a 인 단일 문자입니다 (이 경우 10). 포인터는 배열을 가리킬뿐만 아니라, 그렇습니다.

5

단일char을 할당하고 a의 값을 할당합니다. 그것은 배열을 전혀 할당하지 않습니다.

그것은 임의의 다른 유형의 new 식 생성자를 호출과 같은 같습니다

std::string* s = new std::string("foo"); 
int* i = new int(10); 
std::vector<std::string>* v = new std::vector<std::string>(5, "foo"); 
2

char t(a)a의 값으로 초기화 된 지역 숯을 생성한다.
new char (a)a 값으로 초기화 된 동적으로 할당 된 문자를 만듭니다.

관련 문제