static_assert là một hàm hữu ích cho các lập trình viên để in lỗi ra màn hình sau khi biên dịch chương trình mà không làm rối đầu ra quá nhiều.
Trước đó trong C ++ 11 và C ++ 14, static_assert có chức năng khác, có nghĩa là chúng ta phải viết thông báo của riêng mình trong khi xác định static_assert. Tuy nhiên, trong C ++ 17 static_assert có thể được gọi mà không cần chuyển thông báo.
Nó cũng tương thích với các chức năng của thư viện xác nhận khác như BOOST_STATIC_ASSERT.
Cú pháp
{ auto __range= For-range-Intializer; auto __begin= begin-expression; auto __end= end-expression; for(; __begin!= __end; ++__begin){ range-declaration= *__begin; statement } }
Các loại __begin và __end sẽ khác nhau; chỉ cần có toán tử so sánh. Thay đổi đó không ảnh hưởng đến các vòng lặp for hiện có nhưng nó cung cấp nhiều tùy chọn hơn cho các thư viện. Ví dụ:thay đổi nhỏ này cho phép TS phạm vi (và các phạm vi trong C ++ 20) hoạt động với vòng lặp for dựa trên phạm vi.
Trong C ++ 11 dựa trên phạm vi cho vòng lặp -
for (for-range-declaration : for-range-initializer){ statement; }
Trong tiêu chuẩn C ++ 14, biểu thức vòng lặp như vậy tương đương với đoạn mã sau -
{ auto __range = for-initializer; for ( auto __begin= begin-expresson, __end = end-expression; __begin != __end; ++__begin ){ for-range-declaration = *__begin; statement } }
Ví dụ
#include <bits/stdc++.h> using namespace std; template <typename T, size_t n, typename F> //Template Declaration void fillarray (array<T, N> & a, F && f) //Function to store the values{ static_assert(is_convertible<typename result_of<F()>::type, T>::value,"Incompatible type returned by fun()"); //static_assert signature to ommit the errors. for (auto x : a) x = f(); } int main (){ array<vector<string>, 20> a; fillarray(a, []() { return vector<string>{"TutorialsPoint"}; }); return 0; }
Đầu ra
… … … prog.cpp:20:61: required from here prog.cpp:10:5: error: static assertion failed: Incompatible type returned by fun()