C++;:将模板类型char转换为std::string 我是C++模板的新手。我在将模板成员对象转换为std::string时遇到问题。我下面的代码无法打印字符“c”(在我的机器上它打印的是“R”),我找不到一种方法使它工作。当使用char作为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; } #包括 #包括 模板 甲级{ 公众: T; A(t1):T{t1}{}; std::string toString(){ 返回“+”静态施法(t); }; }; 使用名称空间std; int main() { A A{'c'}; 不能

C++;:将模板类型char转换为std::string 我是C++模板的新手。我在将模板成员对象转换为std::string时遇到问题。我下面的代码无法打印字符“c”(在我的机器上它打印的是“R”),我找不到一种方法使它工作。当使用char作为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; } #包括 #包括 模板 甲级{ 公众: T; A(t1):T{t1}{}; std::string toString(){ 返回“+”静态施法(t); }; }; 使用名称空间std; int main() { A A{'c'}; 不能,c++,string,templates,char,type-conversion,C++,String,Templates,Char,Type Conversion,改变 return "" + static_cast<char>(t); return”“+static_cast(t); 到 返回std::string()+静态_cast(t); 对于原始文本,字符串文字被视为指针。如果std::string可从T构造,则可以使用以下解决方案: #include <iostream> #include <string> template<class T> class A { public:

改变

return "" + static_cast<char>(t); 
return”“+static_cast(t);

返回std::string()+静态_cast(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;
}
#包括
#包括
模板
甲级{
公众:
T;
A(t1):T{t1}{};
std::string toString(){
返回{t};//与

return "" + static_cast<char>(t);

或者
返回std::string(1,静态_cast(t))
谢谢,这很有效,尽管我不太明白为什么。你能解释一下区别吗?@ga38xab String literal有一种普通字符数组,当与算术一起使用时,它被视为指针。因此,表达式的结果是一些
常量字符*
值由
t
的整数值递增。生成的指针无效,这会导致未定义的行为。您需要将运算符
+
应用于
std::string
对象,而不是指针。编译器不会为您创建它,因此您需要手动执行此操作。是否计划为
t
使用
char
以外的其他类型?
return "" + static_cast<char>(t);
return std::string(1, static_cast<char>(t));