Если вы абсолютно уверены, что содержимое строки не будет изменено, вы можете отбросить const
с помощью static_cast
; Ситуация, когда это может быть приемлемым, например, если вы используете некоторое struct
для предоставления данных функции, но тот же struct
также используется для его извлечения, так что членом является LPWSTR
вместо LPCWSTR
.
Если, напротив, функция, которой вы передадите struct
, должна изменить строку, у вас есть две альтернативы.
Самый безопасный способ - выделить отдельную копию строки в виде необработанного динамического массива WCHAR
и скопировать туда содержимое wstring
. Возможно, вы захотите обернуть результат new
умным указателем, если только вы не передаете владение строкой (и в этом случае вам, вероятно, придется использовать некоторую специальную функцию выделения).
Вы также можете передать указатель на внутренний буфер строки, используя &YourString[0]
, но (1) я не уверен, что он гарантированно работает по стандарту, и (2) он работает нормально, только если функция победила не меняйте длину вашей строки, добавляя L'\0'
до ее конца; в этом случае вам также следует заново откорректировать фактическую длину строки.
Как в последнем, так и в первом случае вы должны быть уверены, что функция, которую вы передаете struct
, не ожидает, что указанный буфер будет жить дольше, чем область действия вашего wstring
(осторожно: * 1023) * это временный файл, который умирает на той самой строке, в которой вы его используете, вы должны назначить его новой переменной, чтобы расширить его область действия.