現象:
今天頭腦發熱寫出了一段這樣的代碼
vector<string> blankVector() { return vector<string> blankVector; }
我的原意本來是想把vector<string> blankVector;return blankVector合並成一句話的,結果很自然的編譯報錯了
lujun9972@X41:~/study/c/test$ make
g++ -L/usr/lib -o test test.cpp
test.cpp: 在函數‘std::vector<std::basic_string<char> > blankVector()’中:
test.cpp:27:27: 錯誤: expected primary-expression before ‘blankVector’
test.cpp:27:27: 錯誤: expected ‘;’ before ‘blankVector’
make: *** [test] 錯誤 1
解決:
如此看來C語言的編譯器在處理賦值語句(在return的時候會把return語句後面的值賦值給返回值)的時候,似乎它的右值期望的是一個對象而不是定義式.事實上這段代碼應該修改為
vector<string> blankVector() { return vector<string>(); }
這裡vector<string>()
生成了一個匿名的對象,然後通過return語句被賦值給了返回值.
同樣的,在初始化類成員變量時也可以使用這種方式來初始化,比如
//A.h class A{ static map<string,string> mss; } //A.cpp map<string,string> A::mss = map<string,string>();
本文出自 “暗日” 博客,請務必保留此出處http://darksun.blog.51cto.com/3874064/1264760