포인터가 구조체에 포함되어있는 벡터 요소에 액세스하는 구문을 관리하는 것처럼 보이지 않습니다. MWE 후 더 :연산자 앞의 참조 연산자 포인터 []
#include <vector>
#include <stdio.h>
typedef struct vectag
{
std::vector<float> *X;
} vec;
int main()
{
vec A;
A.X = new std::vector<float>(0);
A.X->push_back(5.0);
// This next line is the problem:
float C = A.X[0];
printf("%f\n", C);
return 1;
}
GCC (G는 ++)
14:24: error: cannot convert ‘std::vector<float>’ to ‘float’ in initialization
물론, 꽤 맞아 말한다. float C = A.X[0];
줄에서 B.X [0]은 올바른 IF X가 포인터가 아닐 것입니다 (회수, std::vector<float> *X;
). X의 요소에 액세스 할 수 있도록 operator [] 앞에 X를 역 참조하는 올바른 구문은 무엇입니까?
P. 멤버 함수 at()
을 알고 있으며,에 대한 옵션이 아닙니다. 범위 검사의 오버 헤드를 원하지 않기 때문입니다. 이는 성능에 중요한 코드의 일부입니다.
A.X-> operator [] (0), 작동합니다. 감사. 그것은 내 응용 프로그램에서 구조체에 다른 것들이 들어 있기 때문에 포인터입니다. vect 사용의 요점은 가변 크기이므로 구조체의 중간에 가질 수 없다는 것입니다. 아, 그리고 MWE에서 초기화하는 것을 잊어 버렸습니다. 내 코드에서는 올바르게 초기화합니다. 위의 MWE를 편집했습니다. – Timtro