Относительно передачи строк в функции Win32 API - PullRequest
2 голосов
/ 15 октября 2011

Мне было интересно, есть ли какое-либо преимущество (только для более коротких строк) в использовании типа данных string вместо массива char или просто строки, такой как:

TextOut(hDC, 10, 10, "Hello", sizeof("HEllO") - 1)

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Одно из различий между строковым типом данных и встроенной строкой, как вы их использовали выше, заключается в том, что использование отдельной именованной ссылки (независимо от того, является ли тип строкой или массивом символов) предотвращает общую ошибку, когда вы изменяете строку, но забываете: изменить копию внутри sizeof (). Если новая строка имеет другую длину, это будет иметь нежелательные последствия. Лучше всего иметь единственное место, которое позволяет вам обновлять оба одновременно, через const char * или string datatype.

const TCHAR TEXTOUT_TEXT[] = _T("Hello");
TextOut( hDC, 10, 10, TEXTOUT_TEXT, sizeof(TEXTOUT_TEXT) / sizeof(TEXTOUT_TEXT[0]) - 1 );
1 голос
/ 15 октября 2011

На практике это вообще не имеет значения.

При этом для API Win32 требуется LPSTR с или LPWSTR с, поэтому все, что не является "одним из них", сначала будет иметьдля преобразования в соответствующий тип char*, поэтому требуется совсем немного дополнительной работы.

Я бы сказал, что гораздо большее значение имеет использование типа данных, который удобен / знаком / легок для вас.работа с.

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