Tôi đang thử nghiệm mã này và tự hỏi tại sao điều này không thành công tại thời gian biên dịch? Tôi đang sử dụng C++ 11 và g ++ 4.7.2.Hành vi lạ thường của hàm tạo C++
Tôi có cấu trúc tương tự trên mã sản xuất của mình, nó đã cho lỗi trong thời gian chạy, sau đó tôi thấy rằng tôi đang xây dựng lớp với kiểu đối số sai.
#include <iostream>
#include <vector>
typedef std::vector<std::string> Word;
class Data {
public:
const Word &word;
Data(Word w) : word(w) {}
};
class Base{
const Data &data;
public:
Base(const Data &d): data(d) {}
~Base() {}
};
class Work : public Base{
public:
Work(const Data &d): Base(d){}
~Work() {}
};
int main(int argc, char **argv){
Word words;
words.push_back("work");
/*
* I'm confused with this constructor, why this passed the compilation
* ??
* Any special rule to reason this scenario ??
*
* But obviously it will fail at run time.
*/
const Work *work = new Work(words);
return 0;
}
Có thể một chuyển đổi tiềm ẩn đang diễn ra ở đâu đó? –
Các từ được chuyển đổi thành Dữ liệu theo phương thức dựng dữ liệu và sau đó gọi Công việc (Dữ liệu) – ZijingWu
Tại sao từ đó không thành công? Trên http://ideone.com/cxkf4X nó trả về thành công. – xanatos