1

gcov は、私のアルゴリズムの 1 つについて不平を言っています。

File 'Algorithm.h'
Lines executed:95.00% of 20
Algorithm.h:creating 'Algorithm.h.gcov'

   17:   25:inline std::vector<std::string> starts_with(const std::vector<std::string>& input, const std::string& startsWith)
    -:   26:{
   17:   27:    std::vector<std::string> output;
   17:   28:    std::remove_copy_if(input.begin(), input.end(), std::back_inserter(output), !boost::bind(&boost::starts_with<std::string,std::string>, _1, startsWith));
#####:   29:    return output;
    -:   30:}

私のテストは次のようになり、合格します:

TEST (TestAlgorithm, starts_with)
{
    std::vector<std::string> input = boost::assign::list_of("1")("2")("22")("33")("222");
    EXPECT_TRUE(starts_with(input,"22") == boost::assign::list_of("22")("222"));
}

問題は何ですか?私は最適化を使用していません。

更新

私のCMakeList.txtには以下が含まれています:

if(CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "-O0")        ## Optimize
endif()
4

1 に答える 1

2

-fno-elide-constructorsg++ でスイッチを使用してみてください

The Definitive Guide to GCC から:

-fno-elide-constructors: C++ オプションをコンパイルするときのこのオプションにより、C++ 標準で許可されているように、GCC は同じ型のオブジェクトを初期化するときに一時オブジェクトの作成を省略しません。このオプションを指定すると、GCC は常に明示的にコピー コンストラクターを呼び出します。

ここでの議論: gcov からより正確な結果を得るにはどうすればよいですか? そしてここ: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076

于 2012-11-29T12:31:57.550 に答える