检察机关加强网站建设,wordpress搭建技术论坛,简单网站制作教程,久久建筑网会员登陆C11关于模板有一些细节的改进#xff1a;模板的右尖括号模板的别名函数模板的默认模板参数模板的右尖括号C11之前是不允许两个右尖括号出现的#xff0c;会被认为是右移操作符#xff0c;所以需要中间加个空格进行分割#xff0c;避免发生编译错误。int main() {std::vecto… C11关于模板有一些细节的改进模板的右尖括号模板的别名函数模板的默认模板参数模板的右尖括号C11之前是不允许两个右尖括号出现的会被认为是右移操作符所以需要中间加个空格进行分割避免发生编译错误。int main() {std::vectorstd::vector a; // error std::vectorstd::vector b; // ok
}
这个我之前都不知道我开始学编程的时候就已经是C11的时代啦。模板的别名C11引入了using可以轻松的定义别名而不是使用繁琐的typedef。typedef std::vectorstd::vector vvi; // before c11
using vvi std::vectorstd::vector; // c11
使用using明显简洁并且易读大家可能之前也见过使用typedef定义函数指针之类的操作那烂代码我就不列出来了反正我是看不懂也不想看...以后都可以使用using额还是列出来吧。typedef void (*func)(int, int); // 啥玩意看不懂
using func void (*)(int, int); // 起码比typedef容易看的懂吧
上面的代码使用using起码比typedef容易看的懂一些吧但是我还是看不懂因为我从来不用这种来表示函数指针用std::function()、std::bind()、std::placeholder()、lambda表达式它不香吗。函数模板的默认模板参数C11之前只有类模板支持默认模板参数函数模板是不支持默认模板参数的C11后都支持。templateintclass A { T value; };
templateint, typename U // errorclass A { T value; };
类模板的默认模板参数必须从右往左定义而函数模板则没有这个限制。template typename R, typename UintR func1(U val) { return val;}
template typename Rint, typename UR func2(U val) { return val;}
int main() { cout func1int, double(99.9) endl; // 99 cout func1double, double(99.9) endl; // 99.9 cout func1double(99.9) endl; // 99.9 cout func1int(99.9) endl; // 99 cout func2int, double(99.9) endl; // 99 cout func1double, double(99.9) endl; // 99.9 cout func2double(99.9) endl; // 99.9 cout func2int(99.9) endl; // 99 return 0;}
对于函数模板参数的填充顺序是从左到右的。声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。