2016-07-29 7 views
-5

Почему существует L перед строкой при создании wstring?Почему существует L при назначении wstring?

например. -

std::string = "regular string :3"; 
std::wstring = L"wide string :/"; 

Это потому, что он ссылается с LPSTR, LPWSTR и LPCSTR-х?

+0

Я снова открыл этот вопрос, потому что (1) мой смысл в том, что ОП все еще изучает С ++ и (2) вопрос, предложенный как дубликат, не дает ответа, который ОП понял бы и нашел бы полезным. – templatetypedef

+0

Будете искать книгу, любые предложения? Может быть, книга для написания и получения процесса в окнах? Благодарю. – Figment

ответ

4

Вы на правильном пути, что это имеет какое-то отношение к LPSTR, LPWSTR и LPCSTR, но это не совсем то, что здесь происходит. Эти типы на самом деле не являются частью стандартного C++ и представляют собой набор типов, специфичных для Microsoft, которые используются в Windows API.

C++ имеет два встроенных типов для символов, char, который используется с std::string и wchar_t, который используется с std::wstring. Если вы пишете строковый литерал в обычных кавычках, C++ рассматривает его как строку, состоящую из char s, которую можно использовать с std::string. Чтобы сообщить C++, что вы пытаетесь сделать строковый литерал из wchar_t s - это то, что вам нужно использовать для работы с std::wstring, вам нужно префикс его с помощью L, потому что именно так определяется C++.

Обратите внимание, что это полностью не зависит от указанных выше типов Microsoft.

+0

И LPVOID, поскольку он говорит, что это указатель anytype, используя int * pointer будет для C++, а LPVOID будет использоваться из Windows? – Figment

+0

LPVOID от Microsoft аналогичен C++ 'void *'. Выполнение некоторых поисковых запросов в Интернете должно указывать вас в правильном направлении на этом. (Многие из этих старых типов Microsoft были из Bad Old Days из коротких и длинных указателей и обычно являются просто красивыми typedefs вокруг встроенных типов C++). – templatetypedef