Я реорганизую старую библиотеку C и в настоящее время изменяю внешний API, чтобы он использовал std :: string вместо const char *.
ColumnType Table::getColType(const char *name) const
{
int id = getColumnId(name) ;
return getColType(id) ;
}
and
int Table::getColumnId (const char * col_name) const
{
unsigned int i = 0;
while ((i < m_table.num_cols) && (strcmp(m_table.cols[i]->name, col_name) != 0) )
i++;
if (i < m_table.num_cols)
return i;
else
return -1;
}
To:
ColumnType Table::getColType(const std::string& name_in) const
{
const char* name = name_in.c_str();
int id = getColumnId(name) ;
return getColType(id) ;
}
and
int Table::getColumnId (const std::string& col_name_in) const
{
const char* col_name = col_name_in.c_str();
unsigned int i = 0;
while ((i < m_table.num_cols) && (strcmp(m_table.cols[i]->name, col_name) != 0) )
i++;
if (i < m_table.num_cols)
return i;
else
return -1;
}
В новом коде я передаю const char * функциям, которые ожидают ссылку на const std :: string.Я знаю, что std :: string можно инициализировать с помощью const char *, и код компилируется правильно (без предупреждений и т. Д.).
Но я просто хочу убедиться, что я не делаю ничего, что может привести к укусуя позже (I18n вопросов в стороне).
Короче говоря, что делает "безопасно"?