Как повторно использовать строковую переменную в C ++ - PullRequest
2 голосов
/ 18 мая 2009

Это правильно, все работает нормально

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 ]

6 голосов
/ 18 мая 2009

То, что все остальные сказали, правда. Тем не менее, в коде, который вы разместили, вы могли бы просто сказать:

ifstream fin( "in.dat", ios::binary | ios::ate );
ofstream fout( "out.dat", ios::binary ); 
2 голосов
/ 18 мая 2009

Это правильно. Назначение на любом языке означает , объект теряет свое старое значение и приобретает новое .

2 голосов
/ 18 мая 2009

То, что вы сделали, правильно. Оператор = перезапишет содержимое строки, это обычный сценарий повторного использования строковой переменной. Вероятно, он даже не будет перераспределять какой-либо буфер, а вместо этого будет использовать существующие.

1 голос
/ 18 мая 2009

Хотя это действительно C ++, это не очень приятно C ++.

Читатель вашего кода должен помнить, что переменная str является изменчивой и служит другой цели в вашем файле кода. Когда код вставляется между вторым назначением str и используется в качестве имени файла, читателю может быть трудно выяснить, что находится в переменной.

Всегда лучше дать вашим переменным разумное имя; тогда оно почти всегда становится постоянным.

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

const char* outputpath("out.dat");
... lots of code
ofstream outputstream( outputpath, ... );
1 голос
/ 18 мая 2009

Нет, просто присвоение нового значения в порядке. Строковый класс отвечает за то, чтобы убедиться, что присвоение работает, чтобы оно не вызывало утечек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...