오늘 코드에서 "실수"를 발견했습니다 ... "실수"로 인해 실제로 컴파일 된 코드가 변경되는지 확실하지 않습니다.참조 변수의 C++ 초기화
double
, x
에 대한 다음 참조의 초기화를 고려하십시오.
double &x{*_data->x_double}; // x_double is a member variable of the struct
// _data, it is a pointer to another double
// eg, I have this somewhere else...
struct data
{
double *x_double;
};
data *_data = new data; // edit: duh, this has to be a pointer...
double another_x = 10.0;
_data->x_double = &another_x; // edit: pointer here too!
그러나 나는하지 않는 한 다음 "실수"... (추가
=
기호를 통지)
double &x={*_data->x_double};
이 코드는 내 실제 코드에서 복사 최소한의 예입니다을했다 doubles에 대한 참조가 있지만 std::vector
과 같은 큰 객체에 대한 참조가 있습니다.
참조 변수는 알고리즘에서 사용되며 변수 이름은 매우입니다. 따라서 참조를 사용하여 해당 변수의 단락 별명을 만듭니다. 왜 내가 그랬는지 이해가 되었으면 좋겠다. ...
그래서 "실수"를 "수정"했지만 출력 결과는 실제로 변경되었다.
[참조 초기화] (http://en.cppreference.com/w/cpp/language/reference_initialization)의 규칙을 살펴보십시오. – NathanOliver
@GillBates 그래서 출력 코드는 동일합니다. 맞습니까? – user3728501
@ user3728501 예,이 경우입니다. –