LPCWSTR 、LPCSTR 、 BYTE * 三种返回值对函数的区别?

有一个接口,功能一致,就是返回值类型不同,请问这几种返回值类型接口的处理方式有什么区别?比如是UNICODE函数还是ASCII函数?
LPCSTR A()
{
m_localFileData = new char[ fLength * sizeof(char) + 1 ];
memset( m_localFileData , 0 , fLength * sizeof(char) + 1 );
}

LPCWSTR A()
{
m_localFileDataW = new WCHAR[ fLength * sizeof(WCHAR) + 1 ];
char* temp = NULL;
temp = new char[fLength * sizeof(char) + 1];
memset( m_localFileDataW , 0 , fLength * sizeof(WCHAR) + 1 );
MultiByteToWideChar( CP_ACP , 0 , temp , strlen(temp) , m_localFile DataW , sizeof(m_localFileDataW) );
}

BYTE * A()
{
m_localFileDataB = new BYTE[ fLength * sizeof(BYTE) ];
memset( m_localFileDataB , 0 , fLength * sizeof(BYTE) );
}

函数的重载嘛,是为了适应调用者的各种需要,简化调用者的操作;
要解释清楚是些什么函数 就有点麻烦了 看下这个吧
https://www.cnblogs.com/maowang1991/p/3571483.html
https://baike.baidu.com/item/LPCSTR/4537603?fr=aladdin
跟具体的编译环境还有些关系的