【发布时间】:2010-10-07 20:18:14
【问题描述】:
我继承了一个将字符串转换为数值的模板,并希望将其应用于转换为 boolean。我对 stringstream 和 locale 类不是很有经验。我似乎确实有一些奇怪的行为,我想知道是否有人可以向我解释一下?
template<typename T> T convertFromString( const string& str ) const {
std::stringstream SStream( str );
T num = 0;
SStream >> num;
return num;
}
在我尝试布尔转换之前,这工作正常
string str1("1");
int val1 = convertFromString<int>(str1); // ok
string str2("true");
bool val2 = convertFromString<bool>(str2); // val2 is _false_
我花了一些时间来找出问题所在。我已确认语言环境的 truename() 返回“true”。
问题似乎与变量num 的初始化有关。我可以将模板更改为此,它可以工作:
template<typename T> T convertFromString( const string& str ) const {
std::stringstream SStream( str );
T num; // <----------------------- Changed here
SStream >> num;
return num;
}
string str2("true");
bool val2 = convertFromString<bool>(str2); // val2 is _true_
为什么有效?我接受用 '0' 初始化 bool 是错误的,但为什么这会导致 SStream>>numconversion 失败?
【问题讨论】:
标签: c++ templates initialization std stringstream