vector<T>
có một constructor mà mất kích thước của vector, và như xa như tôi biết nó là rõ ràng, có thể được chứng minh bằng thực tế là đoạn mã sau thất bại trong việc biên dịchChuyển đổi ngầm định từ int sang vectơ?
void f(std::vector<int> v);
int main()
{
f(5);
}
Những gì tôi không thể hiểu và đang yêu cầu bạn giải thích là tại sao đoạn mã sau biên dịch
std::vector<std::vector<int>> graph(5, 5);
nó không chỉ biên dịch, nó thực sự thay đổi kích thước đồ thị đến 5 và đặt từng yếu tố để một vector trong số năm số không, tức là không giống như sẽ là mã tôi thường viết:
std::vector<std::vector<int>> graph(5, std::vector<int>(5));
Làm cách nào? Tại sao?
Compiler: MSVC10.0
OK, dường như đó là một lỗi MSVC (chưa nhau). Nếu ai đó có thể xây dựng trên lỗi trong câu trả lời (tức là tóm tắt các trường hợp lỗi được sao chép) Tôi sẽ sẵn sàng chấp nhận nó
Điều này (đúng) không biên dịch trên GCC 4.7. Tuy nhiên, một sự khác biệt phi tiêu chuẩn của MSVC++. Họ có lẽ chỉ quên đánh dấu hàm khởi tạo 'tường minh', bạn có thể khai thác trong '' để kiểm tra điều đó. –
syam
@syam: Tôi rất vui khi nhiệt nó không biên dịch trên GCC, nhưng điều thực sự kỳ lạ là ví dụ đầu tiên biên dịch trên MSCV, trong khi cái kia thì không. Đó là điều thực sự kỳ lạ –
@ArmenTsirunyan Không biên dịch trên VS2012; thông báo lỗi nói rằng hàm tạo là 'rõ ràng ' – Praetorian