如何在堆栈上创建的对象的地址是临时的

时间:2015-05-26 17:15:05

标签: c++

我遇到了this问题,我想知道为什么在方法堆栈上创建的非常量字符串的地址在请求其地址时返回一个常量指针。我已经复制粘贴了那里使用的代码示例

void myfunc(string*& val)
{
    // Do stuff to the string pointer
}

int main()
{
    // ...
    string s;
    myfunc(&s);
    // ...
} 

我的问题是&返回变量的地址。所以在上面的例子中,std::string snon constant,那为什么它将地址作为常量返回呢?我想知道的是为什么非常量字符串的地址作为常量地址返回。堆栈上创建的所有对象的地址是否都是常量?

1 个答案:

答案 0 :(得分:1)

让我们说你做了:

void myfunc(string*& val)
{
    val = NULL;
    // How is that supposed to affect the variable s in main?
    // You can't change the address of the object in main.
    // Once a variable is created, its address cannot be modified.
}

int main()
{
    // ...
    string s;

    // Since the address of s cannot be changed,
    // the type of &s is "string* const" not "string&".

    // That's why the call to myfunc is wrong.
    myfunc(&s);
}