楼主:
hakman (^____^)
2017-10-22 23:20:19开发平台(Platform): (Ex: Win10, Linux, ...)
ubuntu 14.04
ubuntu 16.04
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
g++ 4.8.4 (ubuntu 14.04)
g++ 4.8.5 (ubuntu 16.04)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
建立GPGPU-sim 所用到的函式库
问题(Question):
一段可能是问题的 code
virtual bool fromString(const string str)
{
stringstream ss(str);
ss.exceptions(stringstream::failbit | stringstream::badbit);
ss << setbase(10);
if (str.size() > 1 && str[0] == '0') {
if (str.size() > 2 && str[1] == 'x') {
ss.ignore(2);
ss << setbase(16);
} else {
ss.ignore(1);
ss << setbase(8);
}
}
try {
ss >> m_variable;
} catch (stringstream::failure &e) {
return false;
}
m_isParsed = true;
return true;
}
在 ubuntu 14.04 (g++ 4.8.4) 系统中 红色字串是不会丢出错误讯息的
但是在新的系统中 ubuntu 16.04 (g++ 4.8.5) 中 红色字串丢出错误讯息
比较了两个系统中的 failbit 与 badbit 值都是 4 与 1
直接呼叫函式 ss.fail() 与 ss.bad() 都是 false
想要问的问题是
1. 这是因为g++ 改版后,修正的错误吗?
2. 但是直接拿stringstream::failbit 跟呼叫ss.fail() 所出来的结果不同?
一个有错误,一个没有错误,是因为我判断错地方,还是哪里没注意到?
3. 还是说之前的code 就有错误,只是到红色字串才把错误丢出来?
我对c++ 不熟,请大家多多见谅
因为给的不是完整的code,如果需要其他资讯也可以继续补上
或者就给个大概的方向,我再去追看看
喂入的资料(Input):
已在上叙述
预期的正确结果(Expected Output):
已在上叙述
错误结果(Wrong Output):
已在上叙述
程式码(Code):(请善用置底文网页, 记得排版)
已在上叙述
补充说明(Supplement):