c++ 배열 call by reference 포인터



참조 할 포인터 (4)

나는 읽고 있었고 다음 코드를 보았습니다.

template <>
inline bool is_empty(const char* const& x)
{
    return x==0 || *x==0;
}

const char* const& x 는 무엇을 의미합니까?

그것을 이해하기 위해 다음 코드를 시도 :

void f(const char* const& x) 
{
    // whatever
}

void main()
{
    char a = 'z';
    char &j = a;
    f(a);//error
    f(*a);//error
    f(&a);//fine
    f(j);//error
    f(&j);//fine     
    f('z');//error
}

f(&a)f(&j) 에서만 작동합니다.

const char* const& x 실제로 무엇을 의미합니까?

https://ffff65535.com


그것은 "상수 문자에 대한 상수 포인터에 대한 참조"로 번역되어야합니다. 즉, 참조 된 포인터에 새로운 대상 주소를 지정할 수 없으며 참조하는 문자열을 수정하면 안됩니다.

덧글 편집 후. 결과는 동일하게 유지되어야합니다.


다른 대답은 주로 포인터에 대한 참조의 의미를 포함합니다.

하지만 의심 스러우면 포인터 또는 참조 포인터를 참조하는 것 입니까? 혼란 스러울 수 있습니다! 그러나 C ++에서는 포인터를 참조 할 수 없습니다.

포인터는 객체 의 주소를 저장하고 참조는 객체가 아니므 로 참조 할 포인터가 없어야합니다.


포인터 참조는 포인터가 가리키는 것과 정확히 일치합니다.

우리가 참고 문헌에 대해 알고있는 것을 고려하십시오. C ++의 참조는 기존 변수를 다른 곳에서 참조하는 변수입니다.

int x = 1;
int &y = x;    // <-- y refers to x. Any changes to y will update x as well, and vice versa.

또한 우리가 포인터에 대해 알고있는 것을 고려하십시오. 포인터가 메모리의 다른 객체를 가리 킵니다.

int *m = new int(5);   // Pointer to an allocated integer in memory.
int *n = m;            // Pointer to the same memory.

그래서 여러분이 실제로 가지고있는 것은 포인터에 대한 참조입니다!

int *m = new int(5);   // Pointer to an allocated integer in memory.
int *ptr = m;          // Pointer to m.
int *&ptrRef = ptr;    // Reference to ptr.

위의 예에서 ptrRef를 변경하면 포인터 는 업데이트되지만 값은 업데이트되지 않습니다.

여기에 완전한 예제가 있습니다.

int *myPtr = new int(5);   // myPtr points to an integer.

...

void ChangePointer(int *&ptr)
{
    delete ptr;
    ptr = new int(6);
}

...

std::cout << *myPtr << std::endl;  // <-- Output "5"
ChangePointer(myPtr);
std::cout << *myPtr << std::endl;  // <-- Output "6"

위의 예제에서 우리는 ChangePointer 을 참조로 ChangePointer 에 전달하여 함수로 수정할 수 있습니다. 우리가 참조로 전달하지 않으면 함수 내에서 변경 한 내용이 모두 손실됩니다.

귀하의 경우 const 포인터에 대한 참조를 전달하고 있습니다. 이것은 대략 다음과 같습니다.

DoStuff(const Object &myObject);

귀하의 경우에는 객체가 아닌 포인터를 전달하고 있습니다.

그것은 비록 레퍼런스에 의해 const 포인터를 전달하는 것은 약간 중복 된 것처럼 보입니다. 포인터는 변경 될 수없고 (const), 포인터를 참조로 전달할 때 이점이 없습니다 (참조에 의한 전달은 포인터 및 정수와 같은 작은 객체에 대한 값 전달보다 효율적이지 않습니다). 나는 왜 그것이 당신의 경우에 행해졌는지에 관해 추측하고 싶지 않을 것입니다.


cdecl 은 초보자가 복잡한 선언을하는 데 도움이되는 유용한 온라인 도구입니다.

const char* const& i 삽입하면 다음 const char* const& i 반환됩니다.

const char에 const 포인터에 대한 참조로 선언

선언의 의미는 이제 분명해야합니다.





c++