#include <iostream>
#include <sstream>
template <typename T>
const char* numberToString(T number) {
std::ostringstream ss;
ss << number;
return ss.c_str();
}
int main() {
printf(numberToString(123));
return 0;
}
我的错误:
1>d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(8): error C2039: 'c_str' : is not a member of 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
1> d:\programming\euler\problem 4\problem 4\problem 4\source.cpp(26) : see reference to function template instantiation 'const char *numberToString<int>(T)' being compiled
1> with
1> [
1> T=int
1> ]
为什么这不起作用?
const char*
(c_str())。一旦你从 numberToString 返回,你的stringstream
将被销毁,它的底层std::string
也将被销毁。当你调用c_str()
时,它将返回一个指向仅在std::string
生命周期内有效的内容的指针。我建议使用std::string
进行操作,因为它是一个对象(而不是指针),需要时会被复制。 - André Puel