Это программа на С++:
#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.