template<class T>
struct MyRemoveRef
{
typedef T type;
};
void static_cast_test()
{
std::string str = "hello";
std::string str1 = "hello";
std::string str2 = "hello";
std::string str3 = "hello";
//变右值方式1
std::string test_str = static_cast<typename MyRemoveRef<std::string &&>::type &&> (str);
//std::move也可以
std::string test_str1 = std::move(str1);
//变右值方式2
std::string test_str2 = (static_cast<std::remove_reference_t<std::string> &&>(str2));
//变右值方式3
std::string test_str3 = static_cast<std::string &&> (str3);
std::cout << "test_str:'" << test_str << "' and str: '" <<str <<"'" << std::endl;
std::cout << "test_str1:'" << test_str1 << "' and str1: '" << str1 << "'" << std::endl;
std::cout << "test_str2:'" << test_str2 << "' and str2: '" << str2 << "'" << std::endl;
std::cout << "test_str3:'" << test_str3 << "' and str3: '" << str3 << "'" << std::endl;
}