这是否正确,它运作正常
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
此致
答案 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, ... );