C ++ - 系统在哪里存储返回的字符?

时间:2011-04-01 16:00:55

标签: c++ static object-lifetime

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

const char* funA()
{
    return "aa"; // where does system to store this temporary variable?
}

// this is not an valid function
const char* funB()
{
    string str("bb");

    return str.c_str();
}


int _tmain(int argc, _TCHAR* argv[])
{
    cout << funA() << endl;
    cout << funB() << endl; // invalid
    return 0;
}

问题&GT;我们不应该在函数内返回指向局部变量的指针或引用。 因此返回变量“aa”不是funA函数内的局部变量。那是什么?

谢谢

1 个答案:

答案 0 :(得分:10)

"aa"是字符串文字,因此它具有静态存储持续时间。这意味着它从程序开始到结束时都存在。它没有在堆栈或免费存储(堆)上显式分配。

唯一的临时对象是指向该字符串文字的指针,该字符串由value返回(表示返回它的副本)。