在C++ Builder和VC++中使用std :: string的差异

Hen*_*nry 0 c++ c++builder visual-studio-2010

因为我可以得到新的RAD Studio Xe4,我想我会尝试一下.不幸的是,我对C++并不熟悉,因此我想知道为什么在VC++中完美运行的代码在C++ Builder中根本不起作用.大多数问题都是转换不同的var类型.例如 :

std::string Test = " ";
GetFileAttributes(Test.c_str());
Run Code Online (Sandbox Code Playgroud)

在VC++中工作,但在C++ Builder中它不会编译,告诉我"E2034无法将'const char*'转换为'wchar_t*'.我错过了什么?在所有编译器上工作原理不同的原因是什么?同样的?谢谢

rub*_*nvb 6

欢迎使用Windows Unicode/ASCII地狱.

功能

GetFileAttributes
Run Code Online (Sandbox Code Playgroud)

实际上是一个宏定义为GetFileAttributesA或者GetFileAttributesW取决于在包含Windows标头时是否定义了_UNICODE(或者是它UNICODE,或两者?).该*A变种采取char*和相关参数,*W函数需要wchar_t*和相关参数.

我建议*W直接在新代码中调用宽变体.这意味着切换到std :: wstring仅用于Windows代码和一些经过深思熟虑的跨平台应用程序设计选择.