static_assert는 프로그래머가 프로그램을 컴파일한 후 출력을 너무 엉망으로 만들지 않고 화면에 오류를 출력하는 데 유용한 기능입니다.
C++11 및 C++14 초기에는 static_assert에 다른 기능이 있었습니다. 즉, static_assert를 정의하는 동안 자체 메시지를 작성해야 했습니다. 그러나 C++ 17에서는 메시지를 전달하지 않고 static_assert를 호출할 수 있습니다.
BOOST_STATIC_ASSERT와 같은 다른 assert 라이브러리 기능과도 호환됩니다.
구문
{ auto __range= For-range-Intializer; auto __begin= begin-expression; auto __end= end-expression; for(; __begin!= __end; ++__begin){ range-declaration= *__begin; statement } }
__begin 및 __end의 유형은 다릅니다. 비교 연산자만 필요합니다. 이 변경 사항은 기존 for 루프에 영향을 미치지 않지만 라이브러리에 더 많은 옵션을 제공합니다. 예를 들어, 이 작은 변경으로 범위 TS(및 C++20의 범위)가 범위 기반 for 루프와 함께 작동할 수 있습니다.
C++11 범위 기반 for 루프 -
for (for-range-declaration : for-range-initializer){ statement; }
C++14 표준에서 이러한 루프 표현식은 다음 코드와 동일합니다. -
{ auto __range = for-initializer; for ( auto __begin= begin-expresson, __end = end-expression; __begin != __end; ++__begin ){ for-range-declaration = *__begin; statement } }
예시
#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; }
출력
… … … prog.cpp:20:61: required from here prog.cpp:10:5: error: static assertion failed: Incompatible type returned by fun()