반응형
C ++ 구조의 이상한 동작 [1 부]
중히 여기다:
struct box
{
int array[3];
};
int main()
{
box a = {1};
}
위의 내용이 C ++에서 작동하는 경우 다음이 작동하지 않는 이유는 무엇입니까?
struct box
{
int simple_int;
};
int main()
{
box b = 2;
}
그 이유는 무엇입니까?
적절하게 전자는를 사용 box a = { { 1 } }
하므로 각 집계에 대해 하나의 중괄호 세트가 있습니다. 외부 중괄호 세트는 구조용이고 내부 세트는 배열 용입니다. 그러나 언어를 사용하면 내부 중괄호를 생략 할 수 있습니다.
후자의 경우 생략 할 내부 중괄호가 없습니다. 외부 중괄호를 생략 할 수 없습니다. 집계에 대한 이니셜 라이저 목록을 구별하려면 하나 이상의 중괄호 세트가 있어야합니다. 어떤 의미에서 중괄호는 "집계 안에 넣을 항목의 목록입니다."라고 말합니다. 를 작성할 때 box b = 2
컴파일러는 집계 2
내부 에 넣기를 원하는 것을 알지 못합니다 . 대신 b
객체의 일부가 아니라 객체를 2
. 따라서 컴파일러는 a 2
로 변경되는 생성자 또는 변환을 찾으려고 합니다 box
. 이것이 실패하면 오류가 발생합니다.
구문이 잘못되어 작동하지 않습니다. 원하는 경우 암시 적 생성자를 사용하여 b = 2에 대한 지원을 추가 할 수 있습니다.
box b = {2}; // correct syntax with no constructor
또는
struct box
{
// implicit constructor
box(int i) : i(i) {}
int i;
};
box b(2);
box c = 2;
또는
struct box
{
explicit box(int i) : i(i) {}
int i;
};
box b(2);
box c = 2; // disallowed
참조 URL : https://stackoverflow.com/questions/17925909/strange-behaviour-of-structures-in-c-part-1
반응형
'programing' 카테고리의 다른 글
Jackson으로 자식 ID 만 직렬화하는 방법 (0) | 2021.01.19 |
---|---|
양식 데이터를 잃지 않고 현재 페이지를 다시로드하는 방법은 무엇입니까? (0) | 2021.01.19 |
syntastic vim 플러그인에 C ++ 11 지원을 추가하는 방법은 무엇입니까? (0) | 2021.01.19 |
`.queryset` 속성이 없거나`.get_queryset ()`메서드를 재정의하는 뷰에는 DjangoModelPermissions를 적용 할 수 없습니다. (0) | 2021.01.19 |
Flask에서 request.args는 무엇이며 어떻게 사용됩니까? (0) | 2021.01.19 |