如何在c ++中重用字符串变量

时间:2009-05-18 09:43:00

标签: c++ string

这是否正确,它运作正常

string str("in.dat");
ifstream fin(str.c_str(), ios::binary | ios::ate );
.
.
.
//Do I need to clear the string before assigning new name???
str = "out.dat";
ofstream fout(str.c_str(), ios::binary); //seems to work

此致

5 个答案:

答案 0 :(得分:6)

其他人所说的都是真的。但是,在您发布的代码中,您也可以说:

ifstream fin( "in.dat", ios::binary | ios::ate );
ofstream fout( "out.dat", ios::binary ); 

答案 1 :(得分:2)

你所做的是正确的。 =运算符将覆盖字符串内容,这是重用字符串变量的正常情况。它甚至可能不会重新分配任何缓冲区,而是重用现有的缓冲区。

答案 2 :(得分:2)

这样做是正确的。 任何语言的赋值都意味着对象丢失旧值并获取新值

答案 3 :(得分:1)

不,只需分配一个新值即可。字符串类负责确保分配有效,不会引入泄漏。

答案 4 :(得分:1)

虽然它是有效的C ++,但它不是很好的很好的 C ++。

您的代码的读者需要记住str变量是可变的,并且在整个代码文件中起到不同的作用。当在str的第二个赋值之间插入代码并将其用作文件名时,读者可能会发现很难找到变量中的内容。

让变量成为一个合理的名称总是更好;然后它几乎总是变得不变。

const char* inputpath("in.dat");
ifstream inputstream( inputpath, ... );

const char* outputpath("out.dat");
... lots of code
ofstream outputstream( outputpath, ... );