我有以下代碼:轉換的char *字符串和
#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 –