1

gcov 抱怨我的一种算法:

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++ 中的开关

来自 GCC 的权威指南:

-fno-elide-constructors:编译 C++ 选项时的此选项使 GCC 在初始化相同类型的对象时不会省略创建临时对象,这是 C++ 标准所允许的。指定此选项会导致 GCC 在所有情况下都显式调用复制构造函数。

这里有一些讨论: 如何从 gcov 获得更准确的结果? 在这里:http ://gcc.gnu.org/bugzilla/show_bug.cgi?id=12076

于 2012-11-29T12:31:57.550 回答