반응형
Array [n] vs Array [10]-변수 대 실수로 배열 초기화
내 코드에 다음과 같은 문제가 있습니다.
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
다음 오류를 반환합니다.
error: variable-sized object 'tenorData' may not be initialized
double tenorData[10]작품을 사용하는 반면 .
왜 그럴까요?
C ++에서 가변 길이 배열은 유효하지 않습니다. G ++에서는 이것을 "확장자"로 허용하므로 (C에서 허용하기 때문에) G ++에서는 ( -pedanticC ++ 표준을 따르지 않고) 다음과 같이 할 수 있습니다.
int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++
"가변 길이 배열"(적절한 가변 길이 배열이 허용되지 않기 때문에 C ++에서 "동적 크기 배열"이라고 더 잘 함)을 원하면 메모리를 직접 동적으로 할당해야합니다.
int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!
또는 더 나은 방법은 표준 컨테이너를 사용하는 것입니다.
int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>
그래도 적절한 배열을 원하면 만들 때 변수가 아닌 상수를 사용할 수 있습니다 .
const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
마찬가지로 C ++ 11의 함수에서 크기를 얻으려면 다음을 사용할 수 있습니다 constexpr.
constexpr int n()
{
return 10;
}
double a[n()]; // n() is a compile time constant expression
반응형
'Program Club' 카테고리의 다른 글
| Dictionary.Add 대 Dictionary [key] = value의 차이 (0) | 2020.10.31 |
|---|---|
| UIScrollView에서 UIRefreshControl을 사용할 수 있습니까? (0) | 2020.10.31 |
| Tomcat에 배포 된 Spring Boot War (0) | 2020.10.31 |
| Android에서 String.join의 대안? (0) | 2020.10.31 |
| PowerShell 배열 초기화 (0) | 2020.10.30 |