C++ 中的 static_assert
static_assert 是一个函数,对程序员很有用,可以在编译程序后在屏幕上打印错误,而不会太多地混淆输出。
早期的 C++11 和 C++14 标准中,static_assert 有一些不同的用法,这意味着我们必须在定义 static_assert 时自己编写消息。但 C++17 中可以调用 static_assert 而无需传递消息。
它也与其他断言库函数兼容,如 BOOST_STATIC_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 循环没有影响,但却为库提供了更多选择。例如,这么一点改动可以让 range TS(以及 C++20 中的 range)可以和基于范围的 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()
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP