#c
#c
Вопрос:
Я думал, что const CStringamp; и LPCTSTR одинаковы, но, запустив приведенный ниже код в VS2019 (с параметром сборки Character Set = Not Set), когда я меняю определение на m_str, оно работает с использованием LPCTSTR, но не при использовании const CString amp; . Что здесь не так, пожалуйста?
#include "stdafx.h"
#include <Windows.h>
#include <WinUser.h>
class CTest
{
public:
CTest(LPCTSTR str) : m_str(str) {}
const CStringamp; m_str; // Invalid inside t2
//LPCTSTR m_str; //Valid inside t2
};
class CTest2
{
public:
CTest2(CTestamp; t) : m_test(t) { std::cout << m_test.m_str << std::endl; }
CTest amp;m_test;
};
int main(int argc, char* argv[])
{
CString s("Hello");
CTest t(s);
CTest2 t2(t);
return 0;
}
Комментарии:
1.
CTest(LPCTSTR str) : m_str(str) {}
Это инициализируетm_str
ссылкой на временное,CString
созданное изstr
, которое затем немедленно уничтожается и оставляет ссылку зависшей.2.
LPCTSTR
являетсяconst char*
илиconst wchar_t*
в зависимости от компиляции. Это указатели. Они сильно отличаются от ссылок (обозначаемыхamp;
символом), поэтому они не совпадают. Попробуйте изменитьconst CStringamp; m_str;
наconst CString m_str;