std::map 在炼金术中损坏了?
以下代码测试以 std::string 作为键的 std::map 的使用:
#include <stdio.h>
#include <map>
#include <string>
using namespace std;
typedef map<string, int> test_map_t;
int main(int argc, char **argv) {
test_map_t test_map;
test_map["test1"]= 1;
test_map["test2"]= 2;
test_map["test3"]= 3;
string tmp= "test1";
printf("%s : %d \n", tmp.c_str(), test_map[tmp]);
return 0;
}
当使用普通 gcc 编译时,此测试将按预期打印出“test1 : 1”。但是,当使用 alchemy 编译时,它将打印“test1 : 3”(!)。这里有些事情非常不对劲。
有没有任何解决方法,或者我只是被困住了?
The following code tests the use of std::map with std::string as a key:
#include <stdio.h>
#include <map>
#include <string>
using namespace std;
typedef map<string, int> test_map_t;
int main(int argc, char **argv) {
test_map_t test_map;
test_map["test1"]= 1;
test_map["test2"]= 2;
test_map["test3"]= 3;
string tmp= "test1";
printf("%s : %d \n", tmp.c_str(), test_map[tmp]);
return 0;
}
When compiled with ordinary gcc, this test will print out "test1 : 1", as expected. However, when compiled with alchemy it will print "test1 : 3" (!). Something is very wrong here.
Are there any workarounds for this or am I just stuck?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
类弦在炼金术中被破坏。运算符复制 (=) 中存在错误。地图与其他类配合良好
class string is broken in alchemy. There is a bug in operator copy (=). map works fine with other class
当然看起来像一个错误。
通常,源代码(标头)是 STL 分发的一部分 - 您可以逐步了解发生了什么吗?也许可以将源代码与 GCC 版本进行比较。
如果确认的话,您似乎有一个铸铁外壳可以将其带到供应商处进行修复。
Sure looks like a bug.
Typically the source code (headers) is part of STL distribution - can you step thru to find out what is going on? Compare source to GCC version maybe.
Seems like you have a cast-iron case to take this to the vendor for fix if confirmed.
你不应该使用cstdio吗?但你的代码与 gcc 版本 4.4.2 20091027 完美配合,我已经测试过。是完整的代码还是有什么东西可能会覆盖堆栈。
Should not you use cstdio? But your code works perfectly with gcc version 4.4.2 20091027, i have tested it. Is it the complete code or something is there which might be overwriting the stack.