Я следующий код:Преобразовать символ * в строке &
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string &s1 = argv[0]; // error
const string &s2 = argv[0]; // ok
argv[0] = "abc";
cout << argv[0] << endl; // prints "abc"
cout << s2 << endl; // prints program name
}
Я получаю следующее сообщение об ошибке для s1
:
invalid initialization of reference of type 'std::string& {aka std::basic_string<char>&}' from expression of type 'char*'
Тогда почему компилятор принимать s2
?
Интересно, когда я присваиваю новое значение argv[0]
, тогда s2
не изменяется. Компилятор игнорирует, что это ссылка, и все равно копирует значение? Почему это происходит?
Я пишу это в Code :: Blocks 16.01 (mingw). То же самое происходит и с/без -std=c++11
.
Вы бы сказали, что 'argv [0]' является 'std :: string'? – Biffen
«Тогда почему компилятор принимает s2?» из-за неявного преобразования. http://stackoverflow.com/questions/4553896/conversion-of-char-to-string –