проблема с переменной-членом при использовании ‘const CString

#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;