Что такое `CString`?
Почему я вижу, что какой-то код с использованием CStrings
объявлен по-разному.
Некоторые используют этот формат
char a_c_string [];
В то время как другие используют
CString another_c_string;
Есть ли разница? Все ссылки, которые я нашел в CStrings
, объявляют так, как я сделал в первом примере, я видел, как это делалось на форумах и т.д., Где люди приводят примеры.
Ответы
Ответ 1
CString
не является ни C, ни С++. Похоже, это изобретение Microsoft, которое по существу является альтернативой std::string
:
-
CString
объекты могут расти в результате операций конкатенации. -
CString
объекты следуют за семантикой значений. Подумайте об объекте CString
как о фактической строке, а не как о указателе на строку. - Вы можете свободно заменить объекты
CString
на аргументы функции const char*
и LPCTSTR
. - Оператор преобразования дает прямой доступ к строковым символам в виде массива символов только для чтения (строка стиля C).
Я рекомендую игнорировать его, чтобы:
(a) люди знают, о чем вы говорите;
(b) ваш код переносится;
(c) вы пишете С++, который каждый может рационализировать в соответствии со всемирно принятым стандартом ISO С++, который многие, многие люди проводят много и много часов, обсуждая эту цель (вы знаете, в отличие от нескольких парней в комната в одном офисе компании).
Он будет доступен только при программировании с Microsoft Visual С++, что существенно ограничивает.
Ответ 2
Многие графические интерфейсы GUI имеют свой собственный класс строк.
например QT имеет QString, wxWindows имеет wxString. В этом случае MFC имеет CString.
Тогда это удобно и имеет смысл использовать CString, когда в контексте кода MFC gui, потому что тогда вы уже сильно зависите от Visual С++, а переносимость кода не будет предусмотрена. Я был бы осторожен в заявках, говорящих, чтобы игнорировать его, потому что он нестандартен - все зависит от контекста.
Ответ 3
На всякий случай, что причина путаницы: "C" в "CString" - это только префикс, который имеют все классы из MFC. MFC является библиотекой С++ Microsoft, завершающей API win32. Этот класс строк имеет мало общего с "C-строками", который используется для описания средств обработки строк, которые предоставляет язык C. Язык C предоставляет только функции для обработки строк, которые работают с указателем на массив char, представляющий строку, и они требуют, чтобы последний символ был NUL (также называемый NUL-терминалом или с нулевым завершением). Обратите внимание, что сам С++ также имеет класс строк std::string
(ну, на самом деле там также std:: wstring и std:: basic_string, но как новичок вы можете смело игнорировать их).
Ответ 4
CString
используется в Visual С++.
Visual С++ - это Microsoft реализация С++