Таинственная функция появляется в моем отчете gcov

Таинственная функция Function '_ZNSsaSERKSs' появляется в моем отчете gcov, который я понятия не имею, что это такое, может кто-то может объяснить мне, что происходит

Спасибо

Заголовочный файл

#ifndef CASHIER_H
#define CASHIER_H
#include <string>
using namespace std;class cashier
{
public:

void setID(string);
string getID();

void setPassword(string);
string getPassword();

void settries(int);
int gettries();
void increase_tries();

private:
string ID;
string Password;
int tries;};

#endif  /* CASHIER_H */

Файл реализации

#include "cashier.h"void cashier::setID(string value)
{
this->ID = value;
}

void cashier::setPassword(string value)
{

this->Password = value;

}

string cashier::getID()
{
return this->ID;
}

string cashier::getPassword()
{
return this->Password;
}

void cashier::settries(int value)
{
this->tries=value;
}
int cashier::gettries()
{
return this->tries;
}
void cashier::increase_tries()
{
this->tries = this->tries + 1 ;

}

Я набираю следующую команду

gcov -f cashier.gnco

Я получил следующие результаты B

Function '_ZN7cashier8settriesEi'
Lines executed:100.00% of 3Function '_ZN7cashier8gettriesEv'
Lines executed:100.00% of 2

Function '_ZN7cashier14increase_triesEv'
Lines executed:100.00% of 3

Function '_ZN7cashier11getPasswordEv'
Lines executed:100.00% of 2

Function '_ZN7cashier5getIDEv'
Lines executed:100.00% of 2

Function '_ZNSsaSERKSs' //mysterious function
Lines executed:0.00% of 2

Function '_ZN7cashier11setPasswordESs'
Lines executed:100.00% of 3

Function '_ZN7cashier5setIDESs'
Lines executed:100.00% of 3

File 'cashier.cpp'
Lines executed:100.00% of 18
cashier.cpp:creating 'cashier.cpp.gcov'

File '/usr/include/c++/4.4/bits/basic_string.h'
Lines executed:0.00% of 2
/usr/include/c++/4.4/bits/basic_string.h:creating 'basic_string.h.gcov'
File '/usr/include/c++/4.4/bits/basic_string.h'
Lines executed:0.00% of 2
No branches
Calls executed:0.00% of 1
/usr/include/c++/4.4/bits/basic_string.h:creating 'basic_string.h.gcov

РЕДАКТИРОВАТЬ

0

Решение

С помощью c++filt разобрать имя дает

std::string::operator=(std::string const&)

оператор копирования-назначения для std::string,

3

Другие решения

Как описано другими, вам нужно использовать c++filt перевести имена из «искаженной» формы в удобочитаемое человеком. c++filt принимает стандартный ввод, обнаруживает искаженные строки C ++ и записывает в вывод с исправленными именами; так, например gcov -f filename | c++filt

Источник вашей проблемы принимает std::string по значению в заголовочном файле и помещении тела функции в реализацию, это не позволяет компилятору выполнять хитроумные оптимизации и вынуждает его создавать временные std :: strings.

void setID(string);
void setPassword(string);

Эти функции достаточно тривиальны, поэтому вы должны поместить их реализации в заголовочный файл, чтобы компилятор мог встроить их в случае необходимости. Но в конечном итоге вам нужно принять рекомендации.

void setID(const std::string& id)
{
this->m_id = id;
}

void setPassword(const std::string& password)
{
m_password = password;
}

(Префикс «m_» для переменных-членов является одним из наиболее широко используемых методов различения имен членов от имен переменных).

Это избавляет компилятор от необходимости создавать промежуточный временный объект и копировать текст из исходной строки. Если ваша производительность все еще остается проблемой, вы можете посмотреть на значения C ++ 11s:

void setPassword(std::string&& password);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector