2009-05-18 3 views

ответ

2

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

2

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

+0

Спасибо очень высокую оценку – 2009-05-18 09:48:21

1

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

+0

Спасибо за помощь – 2009-05-18 09:48:11

6

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

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

я мог бы добавить, что это предпочтительнее. С точки зрения чтения кода. – xtofl

+0

Зависит, если он использует имя для чего-то еще (например, сообщения об ошибке) в коде, который он не опубликовал. Я просто хотел сделать сюрвей, чтобы он знал, что ему не всегда нужно использовать s.c_str(). – 2009-05-18 09:57:19

1

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

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

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

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

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

Конструкторы потока файлов принимают const char * как свой первый параметр, а не строку std:; – 2009-05-18 10:08:09

+0

Спасибо, Нейл. Исправлено это. – xtofl

Смежные вопросы