C++:将模板类型 char 转换为 std::string
C++: Converting template type char to std::string
我是 c++ 模板的新手。我在将模板化成员对象转换为 std::string 时遇到问题。我下面的代码无法打印字符"c"(在我的机器上它打印"R"代替(,我找不到使其工作的方法。使用字符作为类型 T 时有没有办法做到这一点?
#include <iostream>
#include <string>
template<class T>
class A {
public:
T t;
A(T t1):t{t1}{};
std::string toString(){
return "" + static_cast<char>(t);
};
};
using namespace std;
int main()
{
A<char> a{'c'};
cout << a.toString() <<"n";
return 0;
}
问题
return "" + static_cast<char>(t);
是""
不是一个std::string
对象,它是一个文字字符串,它是一个常量字符数组。作为一个数组,它将衰减到指向其第一个元素的指针,然后static_cast<char>(t)
添加到指针中。
然后,此新指针将用作以 null 结尾的字符串来创建std::string
对象,并且使用无效指针会导致未定义的行为。
您可以直接从单个字符构造std::string
并将其返回为
return std::string(1, static_cast<char>(t));
更改
return "" + static_cast<char>(t);
自
return std::string() + static_cast<char>(t);
对于原始文本,您将有一个被视为指针的字符串文本。
如果std::string
可以从T
构造,则可以使用以下解决方案:
#include <iostream>
#include <string>
template<class T>
class A {
public:
T t;
A(T t1):t{t1}{};
std::string toString(){
return {t}; // <- this constructs a string from t
};
};
using namespace std;
int main()
{
A<char> a{'c'};
cout << a.toString() <<"n";
return 0;
}
实时代码在这里。
但是,如果std::string
无法从T
构造,这将失败。在这种情况下,您可以使用模板专用化来正确处理转换。
相关文章:
- 使用char类型将decimal转换为string,将string转换为decimal
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 将日语 wstring 转换为 std::string
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 如何在 std::string 和 Aws::String 之间进行转换?
- C++:将模板类型 char 转换为 std::string
- 无法<string>从"常量字符 []"转换为<类名>
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 无法从'const std::string [3]'转换为'std::string'
- 从 std::string 转换为 const 无符号整数
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 为什么std::string没有(显式)const char*强制转换
- 将单个字符转换为 std::string 前缀 \x01
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- 将 std::string 转换为 const char* 用于 printf 消耗
- Swig无法将python3的字节对象转换为std::string
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 将 std::string 转换为 const tchar*