我有一個關於編譯器/語言行爲的問題,我期望其行爲有所不同。 爲什麼下面的代碼會被編譯?構造函數中具有空std :: vector的意外編譯器行爲
#include <vector>
class A { };
int main() {
A a(std::vector<int>());
}
它不能用std::vector<int>(0)
或其他值編譯。不過,如果您給std::vector<int>(*)
一個指針,它會進行編譯。它也適用於除「int
」之外的其他類型。我希望代碼根本不起作用。有人可以向我解釋發生了什麼?
這裏是剪斷上cpp.sh參考代碼:http://cpp.sh/4l3a
我用gcc版本4.8.4。
因爲它_does_編譯,你應該假設它應該,而且我們不能猜測你爲什麼認爲它不應該。 _你有什麼期望?_ –
抱歉,重複的答案。 @LightnessRacesinOrbit在他的回答中正確地承擔了我的期望。 – Squolly