Это программа на С++:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int test_string(const string & str) {
return str.size();
}
void main() {
test_string(""); //can compile
vector<string> v;
string sum = accumulate(v.cbegin(), v.cend(), ""); //cannot compile
}
Я хочу использовать неявное преобразование от const char * до string в вызове общей функции STL accumulate. Я знаю, что преобразование из const char * в строку не является явным, поэтому мы можем передать параметр const char * для вызовов, в которых требуется тип string. Это можно доказать с помощью вышеуказанной функции test_string. Но когда я сделал то же самое в accumulate, компилятор жалуется:
error C2440: '=': cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const char *'
Код работает только тогда, когда я заменил "" на string(""). Я не понимаю, почему неявное преобразование работает для моей пользовательской функции, но не работает в accumulate. Вы можете это объяснить? Большое спасибо.
PS: Я использую Visual Studio 2015.