你對枚舉的猜測是錯誤的;問題在別的地方。如果沒有顯式定義拷貝構造函數,則以下代碼編譯時不會出現問題,並且如果存在具有非const引用的拷貝構造函數,則無法編譯。
#include <iostream>
#include <iterator>
#include <vector>
enum MyEnum {
e0, e1, e2
};
struct MyStruct {
int myInt;
double myDouble;
MyEnum myEnum;
// MyStruct(MyStruct&){} // uncomment to make compilation fail
};
std::ostream& operator<<(std::ostream& out, const MyStruct& s) {
out<<"{"<<s.myInt<<","<<s.myDouble<<","<<s.myEnum<<"}";
return out;
}
int main() {
MyStruct s = {42, 3.1415926, e0};
MyStruct s1 = s;
std::vector<MyStruct> v(10, s1);
std::copy(v.begin(), v.end(), std::ostream_iterator<MyStruct>(std::cout,"\n"));
return 0;
}
正如其他人在評論中指出,一個現實的例子證明錯誤需要了解什麼是真正的問題。
從什麼時候C++合成複製構造函數時它不能?如果其中一個成員不能被複制,那麼根本沒有自動拷貝構造函數生成,故事結束。 – 2012-02-02 07:45:08
如果它是隱含的,你能解釋你如何知道拷貝構造函數有這個簽名? 'int main(){const X x1; X x2(x1); '不行? – 2012-02-02 07:45:33
請給出一個具體的例子來說明這個問題。 – HighCommander4 2012-02-02 07:52:54