摘要: C语言时代,for语句引入了初始化器,代码如下: 这是个很大的进步,i的作用域被限定在for循环内部。 但是if语句就没有类似语法,C++98代码要做很烦人的处理,如下: 这种风格的代码见的太多了。程序员心底里最害怕的是,因为拷贝粘贴,应该写it3的地方,被错写成it2或it1。 如果想用一个变量名 阅读全文
posted @ 2018-03-07 16:38 thomas76 阅读(1618) 评论(0) 推荐(0)
摘要: 考虑对一个tuple的读取,如下代码: 如果你认为tuple用处没有pair大,则有pair的代码: C++11给出了简洁的方式,如下代码: C++17给出更简洁的方式,如下代码: 这就是结构化的绑定(SB)的第二种形式。SB可以绑定数组的元素(第一种形式),SB绑定结构体的数据成员(第三种形式)。 阅读全文
posted @ 2018-03-07 15:18 thomas76 阅读(1064) 评论(0) 推荐(0)
摘要: C++11的for设计有个小缺陷,对range的begin和end要求为相同的类型。 例如:std::vector<int> vec; vec.begin() 和 vec.end()是相同类型的。 例如:{1,2,3,4,5,6} 被编译器生成std::initialize_list<int>容器, 阅读全文
posted @ 2018-03-05 20:53 thomas76 阅读(1606) 评论(0) 推荐(0)
摘要: typename ... Args是变长参数包,Args... args是最简单的一种拆包形式。 对于函数模板 template < typename... Args > void test(Args... args); 当调用test(1,'F')时,依次进行实参推演,1被推演成int,‘F’被推 阅读全文
posted @ 2018-03-04 19:11 thomas76 阅读(241) 评论(0) 推荐(0)