Чудех се колко дълго живее низова константа в C++. Например, ако създам някакъв const char *str = "нещо" вътре във функция, ще бъде ли безопасно да върна стойността на 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;
, отговорът пак щеше да е същият. - person David Schwartz   schedule 16.07.2014