由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 为什么foo1可以而foo2不行?
相关主题
菜鸟求教,一个c++的困惑const 指针类型转换
A aimple C++ questionreverse words, not the Microsoft one!!!
请教这个程序里用到了什么constructor啊?有几个copy constructor?c++ 得最基本问题
C++菜问: 怎么这样也可以?这个在c++ const不变,不能用相同地址的变量改,咋做的
请问一个exception题目which func will be called?
没有经过构造函数???C++疑问
一个古怪的C程序运行错误。一个读用户输入的小问题
[C++ boost::interprocess] 讨论贴定义的struct数组很大时,为什么会出现奇怪的大数字?
相关话题的讨论汇总
话题: foo2话题: foo1话题: world话题: hello话题: string
进入Programming版参与讨论
1 (共1页)
d*******n
发帖数: 524
1
程序在后面。
我的理解是“Hello World”是内存里一段const char[],
foo2之所以不行是因为除了foo2这个function之后,这个char 的array就被release了。
但foo1难道不是相同的情况吗?为什么
cout << foo1() < 这一行就可以输出Hello World呢?
请指教
#include
#include
using namespace std;
char* foo1();
const string& foo2();
int main(int argc, _TCHAR* argv[])
{
int i;
cout << foo1() < cout << foo2() << endl;
cin >> i;
return 0;
}
char* foo1()
{
return "Hello World";
}
const string& foo2()
{
return "Hello World";
}
X****r
发帖数: 3557
2
你理解得不对。
string literal,比如你这里的"Hello World",是一直存在不会被释放的。
foo2之所以不行是因为它返回了一个string临时变量的引用。
你把这个临时变量显式地写出来就知道了:
const string& foo2()
{
string temp("Hello World");
return temp;
}
这里临时变量temp在foo函数结束之后就释放了,但是main里还在继续使用它。

了。

【在 d*******n 的大作中提到】
: 程序在后面。
: 我的理解是“Hello World”是内存里一段const char[],
: foo2之所以不行是因为除了foo2这个function之后,这个char 的array就被release了。
: 但foo1难道不是相同的情况吗?为什么
: cout << foo1() <: 这一行就可以输出Hello World呢?
: 请指教
: #include
: #include
: using namespace std;

d*******n
发帖数: 524
3
所以临时的东西是那个reference,而char array本身却并不临时?
那么所有的在程序中提到的这种字符串(想这个"Hello World")都是一直存在
于内存中直到程序结束?
那么他们被放在内存中的什么地方呢?肯定不是stack里面,由于不是dynamic
memory allocation,那也不是heap上。

【在 X****r 的大作中提到】
: 你理解得不对。
: string literal,比如你这里的"Hello World",是一直存在不会被释放的。
: foo2之所以不行是因为它返回了一个string临时变量的引用。
: 你把这个临时变量显式地写出来就知道了:
: const string& foo2()
: {
: string temp("Hello World");
: return temp;
: }
: 这里临时变量temp在foo函数结束之后就释放了,但是main里还在继续使用它。

X****r
发帖数: 3557
4
While it really depends on individual compilers,
string literals are usually stored in a const data segment.

【在 d*******n 的大作中提到】
: 所以临时的东西是那个reference,而char array本身却并不临时?
: 那么所有的在程序中提到的这种字符串(想这个"Hello World")都是一直存在
: 于内存中直到程序结束?
: 那么他们被放在内存中的什么地方呢?肯定不是stack里面,由于不是dynamic
: memory allocation,那也不是heap上。

1 (共1页)
进入Programming版参与讨论
相关主题
定义的struct数组很大时,为什么会出现奇怪的大数字?请问一个exception题目
int i:1没有经过构造函数???
请问C++中局部未使用的变量在优化的时候会去掉么?一个古怪的C程序运行错误。
还是咱们这儿,亲。[C++ boost::interprocess] 讨论贴
菜鸟求教,一个c++的困惑const 指针类型转换
A aimple C++ questionreverse words, not the Microsoft one!!!
请教这个程序里用到了什么constructor啊?有几个copy constructor?c++ 得最基本问题
C++菜问: 怎么这样也可以?这个在c++ const不变,不能用相同地址的变量改,咋做的
相关话题的讨论汇总
话题: foo2话题: foo1话题: world话题: hello话题: string