我一直在想,在C++中,字符串常量存活的时间有多长。例如,如果我在函数内部创建了一些 const char *str = "something" ,返回 str 的值是否安全呢?
我编写了一个示例程序,并非常惊讶地发现,所返回的值仍然存储着那个字符串。以下是代码:
我编写了一个示例程序,并非常惊讶地发现,所返回的值仍然存储着那个字符串。以下是代码:
#include <iostream>
using namespace std;
const char *func1()
{
const char *c = "I am a string too";
return c;
}
void func2(const char *c = "I'm a default string")
{
cout << c << endl;
}
const int *func3()
{
const int &b = 10;
return &b;
}
int main()
{
const char *c = "I'm a string";
cout << c << endl;
cout << func1() << endl;
func2();
func2("I'm not a default string");
cout << *func3() << endl;
return 0;
}
它给我以下输出:
我是一个字符串
我也是一个字符串
我是一个默认字符串
我不是一个默认字符串
10
func3只是为了找出其他类型是否可以使用相同的方法。
因此,问题是:在函数内创建指向字符串常量的指针(如func1()中)是否安全返回?
另外,使用默认字符串值(如func2()中)是否安全?
int j = 2;
-- 那个2会存活多久?如果你可以这样做int const *j = &2;
,答案仍然是一样的。 - David Schwartz