函数返回的指针的地址

时间:2012-08-24 03:19:08

标签: c++ class pointers reference member

我尝试获取类成员函数返回的指针的地址:

class Test{
    ...
    char* d;
    ...
    char* getData(){
        return d;
    }
    ...
}

现在我尝试获取d的地址(假设* d具有有效值):

Test t; 
char** pd = &t.getData();

这会产生语法错误,无法在VC2010上编译。如何获取成员指针变量的地址?

2 个答案:

答案 0 :(得分:2)

简短版本:您正试图获取右值的地址,这是非法的。

版本略长:当您执行t.getData()时,*d会按值返回。这很容易忘记,因为大多数时候,当你使用指针时,你不必担心按值传递而不是传递引用。你只需返回指针,因为它很小。

在这里,

char** pd = &t.getData();

t.getData的返回值是指针的副本,它是 rvalue ,这意味着它是临时的,并且在表达式结束后将不复存在。由于这个原因,你不能取rvalue的地址 - 一旦语句结束它就会失效。但是,如果你将该地址放在左值,它就可以正常工作:

Test t;
char* temp = t.getData(); 
char** pd = &temp;

那是因为现在temp是左值,你可以拿它的地址。

对于您尝试做的事情,您可能最好让getValue()返回char**

答案 1 :(得分:0)

您的getData()函数返回指针的副本。如果你想获取原始指针成员的地址,你必须改变它,以便它返回对指针的引用:

char *&getData() { return d; }

(从设计的角度来看,返回对内部指针的引用和获取地址是一个好主意是另一回事。)

相关问题