Это хорошая декларация, если функция не предназначена для изменения вектора. Это более эффективно, чем передача по значению, поскольку позволяет избежать копирования вектора - дорогостоящая операция, требующая выделения памяти.
Однако для другой функции требуется неконстантный указатель. Как справиться с этим, зависит от того, может ли он изменить данные.
Если этого не произойдет (как вы подразумеваете, когда говорите: «Я только читаю с него»), то варианты:
- Измените его на
otherFunc(void const * arg)
, чтобы дать более сильную гарантию, что он не будет, или
- Удалите квалификацию
const
с const_cast<void*>
при вызове
Обратите внимание, что &*vec[0]
не будет компилироваться; Вы хотите, чтобы vec[0].c_str()
получил C-совместимый указатель на данные первой строки, предполагая, что это то, что вам нужно.
Если он может изменить вектор, вам придется сделать что-то еще, поскольку нет никакого законного способа изменить std::string
через указатель на его данные. Вероятно, лучший вариант - использовать std::vector<char>
вместо std::string
, но это зависит от того, что именно делает функция.