Visual C++自动将A或W附加到函数结尾

4 c++ string unicode winapi visual-c++

在C++中,我定义了一个以此为成员的类:

static const std::basic_string<TCHAR> MyClass_;
Run Code Online (Sandbox Code Playgroud)

此值还有一个getter函数:

LPCTSTR CClass::GetMyClassName()
{
    return MyClass_.c_str();
}
Run Code Online (Sandbox Code Playgroud)

当我创建这个类的实例然后尝试访问它时,会弹出intellisense,但名称已经更改,具体取决于项目是否已针对Unicode或Multibyte进行编译.如果已为Unicode编译,则该函数显示为:

aClass.GetMyClassNameW();
Run Code Online (Sandbox Code Playgroud)

否则它是:

aClass.GetMyClassNameA();
Run Code Online (Sandbox Code Playgroud)

我想知道的是这个名字怎么变了?另外我想知道intellisense是否可以显示函数的正确名称?所以我可以像这样访问它:

aClass.GetMyClassName()
Run Code Online (Sandbox Code Playgroud)

编辑:我在我的代码中使用的精确成员函数名称是:

WinClass::GetClassName()
Run Code Online (Sandbox Code Playgroud)

Rud*_*ddy 12

您的方法名称字面意思是" GetMyClassName "还是" GetClassName "?

GetClassName位于SDK(winuser.h)中,并根据UNICODE定义重新定义.如果您正在使用"GetClassName",则智能感知可能会变得混乱; 事实上,编译器也为实际编译的方法生成A/W后缀,但这一切都可以工作,因为每个人(链接器/编译器)都同意重新定义的名称(即使它不可见).