2013-08-08 21 views
13

Từ khóa auto trong C++ 11 có thay thế mẫu chức năng và chuyên môn không? Nếu có, lợi thế của việc sử dụng các hàm mẫu và các chuyên môn là gì khi chỉ cần nhập tham số hàm là auto. Nếu không, tôi hoàn toàn mong đợi để được downvoted vào địa ngục, nhưng tôi mới đến C + + nhưng vì vậy hãy đi dễ dàng với tôi.Mẫu chức năng so với Từ khóa tự động

template <typename T> 
void myFunction(T &arg) 
{ 
    // ~ 
} 

vs

void myFunction(auto &arg) 
{ 
    // ~ 
} 
+4

Bạn không nhận được phiếu giảm giá vì không biết điều gì đó (ít nhất nó phải như vậy, và dần dần nó hoạt động). Bạn có thể mong đợi vẻ bẩn thỉu vì không làm nghiên cứu. Bạn đã cố gắng biên soạn những đoạn trích đó, bạn có nhìn vào một trong những câu hỏi hiện có về 'tự động 'mà chúng ta có ở đây không? – delnan

+3

Có một cách trong C++ 14: 'auto myFunction = [] (auto & arg) {...}; ' – chris

Trả lời

8

Tóm lại, auto không thể được sử dụng trong một nỗ lực để bỏ qua các loại thực tế của các đối số chức năng, do dính với các mẫu chức năng và/hoặc quá tải. auto được một cách hợp pháp sử dụng để tự động suy ra các loại biến:

auto i=5; 

Hãy rất cẩn thận để hiểu sự khác biệt giữa những điều sau đây, tuy nhiên:

auto x=... 
auto &x=... 
const auto &x=... 
auto *px=...; // vs auto px=... (They are equivalent assuming what is being 
       //     assigned can be deduced to an actual pointer.) 
// etc... 

Nó cũng được sử dụng với nhiều loại hậu tố lợi nhuận:

template <typename T, typename U> 
auto sum(const T &t, const U &u) -> decltype(t+u) 
{ 
    return t+u; 
} 
+0

điều quan trọng là phải phác thảo rằng tự động là tốt và tốt 99% thời gian, đôi khi bạn phải dừng lại trong một giây và suy nghĩ về những gì tự động thực sự đang làm http://stackoverflow.com/questions/12773257/does-auto-type-assignments-of-a-pointer-in-c11-require con trỏ có thể là một trường hợp góc cho tự động . – user2485710

+0

@ user2485710, đã thêm thông tin vào câu trả lời của tôi dựa trên nhận xét của bạn. –

6

Có thể từ khóa auto trong C++ 11 thay thế mẫu chức năng và chuyên môn?

Không. Có đề xuất sử dụng từ khóa cho mục đích này, nhưng không có trong C++ 11, và tôi nghĩ C++ 14 sẽ chỉ cho phép nó cho lambdas đa hình chứ không phải mẫu chức năng.

Nếu có, lợi thế của việc sử dụng chức năng mẫu và chuyên môn chỉ cần nhập tham số chức năng là auto.

Bạn có thể vẫn muốn tham số mẫu có tên nếu bạn muốn tham chiếu đến loại; sẽ thuận tiện hơn std::remove_reference<decltype(arg)>::type hoặc bất kỳ thứ gì.