3

次のコードは、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」(!)が出力されます。ここで何かが非常に間違っています。

これに対する回避策はありますか、それとも私は立ち往生していますか?

4

3 に答える 3

2

クラス文字列は錬金術で壊れています。演算子のコピー(=)にバグがあります。マップは他のクラスで正常に機能します

于 2010-09-24T08:22:32.550 に答える
1

確かにバグのように見えます。

通常、ソースコード(ヘッダー)はSTLディストリビューションの一部です-何が起こっているのかを知るためにステップスルーできますか?ソースをGCCバージョンと比較してください。

確認された場合、これを修正のためにベンダーに持っていくための鋳鉄製のケースがあるようです。

于 2010-09-20T23:32:51.330 に答える
0

cstdioを使うべきではありませんか?しかし、あなたのコードはgccバージョン4.4.2 20091027で完全に動作します、私はそれをテストしました。それは完全なコードなのか、それともスタックを上書きしている可能性のあるものがあるのか​​。

#include <cstdio>
#include <map>
于 2010-09-21T02:16:22.383 に答える