从现在开始我应该只在Windows API函数上使用W版本吗?

NFR*_*RCR 2 c++ winapi

似乎在Windows XP支持结束后不久,Windows SDK人员就弃用了所有A版本的功能.

#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
_WINSOCK_DEPRECATED_BY("WSASocketW()")
WINSOCK_API_LINKAGE
_Must_inspect_result_
SOCKET
WSAAPI
WSASocketA(
    _In_ int af,
    _In_ int type,
    _In_ int protocol,
    _In_opt_ LPWSAPROTOCOL_INFOA lpProtocolInfo,
    _In_ GROUP g,
    _In_ DWORD dwFlags
    );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
Run Code Online (Sandbox Code Playgroud)

500*_*ror 5

A版本可以正常工作并继续工作,但由于本机API是unicode,因此这些A函数调用将在内部转换为W调用,因此直接使用W调用会更有效.

  • 对于Windows,最好使用`std :: wstring`并调用`W`函数,两者都是UTF-16。但是,如果您将包装程序设计为可在多个平台上运行,则必须考虑到大多数平台都使用UTF-8,因此必须确定最适合包装程序的内容。更容易在任何地方使用UTF-8并在需要时与UTF-16进行相互转换,这会带来转换开销。或者,您可以在Windows上使用UTF-16,在其他任何地方都可以使用UTF-8,这是以使界面复杂化为代价的,以提高性能并失去一些可移植性。 (2认同)