在C++中,有一些情况下,我们需要将tuple或者vector中的值当做参数传递到一个函数当中,传统的做法如下:
std::vector< int> v;
call(v[0], v[1], v[2]);
auto r = std::make_tuple(1, 2.1, 1ull)
call(std::get(r), std::get(r), std::get(r));
我们可以通过如下的方式,将tuple解包传入到函数当中:
#include < iostream>
#include < tuple>
template struct index_sequence { };
te...
阅读全文
c++98 auto
早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,拥有自动的生命周期;但是该作用是多余的,变量默认拥有自动的生命周期。
int a = 10; // 自动生命周期
auto int b = 20; // 自动生命周期
在C++ 11 中,已经删除了该用法,取而代之的作用是:自动推断变量的类型。
c++11 auto
auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型:
au...
阅读全文
1、下载protobuf的编译器protoc
地址:https://github.com/google/protobuf/releases
window:
下载: protoc-3.3.0-win32.zip
解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。
当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exe
linux:
下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip
解压,把bin目录下的protoc复制到...
阅读全文
JavaScript 运算中,一共包含 4 个相等比较算法:
抽象相等比较
严格相等比较
SameValueZero
SameValue
可以这么说,只要你做过相等比较,你就在使用四个算法中的一个。因为这些算法部署在了涉及到相等比较的操作符或方法中。
算法 使用了此算法的地方(部分) 抽象相等比较 == 运算符 严格相等比较 === 运算符、Array.prototype.indexOf 方法 SameValueZero String.prototype.includes、Array.proto...
阅读全文
先看下面一段程序:
#include
int main()
{
int i = 123;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}
printf函数里面又嵌入了printf函数,你认为此段程序会打印出什么?
本程序在VC 6.0上编译,程序的实际运行结果是:12331
对于这个运行结果,你怎么看?
我们来一步步分解printf函数,看看为啥会输出这个结果。
程序中的print函数是这样写的:printf("%d\n...
阅读全文
在谈&&和||两个运算符的短路运算之前,先看一段程序:
#include < stdio.h>
int main()
{
int para1 = 1, para2 = 2, para3 = 3, para4 = 4;
int r1 = 1, r2 =1;
(r1 = para2 < para1) && (r2 = para3 > para4);
printf("r1 = %d, r2 = %d\n", r1, r2);
r1 = 1;
r2 = 1;
(r1 = para2 > para1) || (r2 = para4 < para3);
printf("r1 = %d, r2 = %d\n", r1, r2);
...
阅读全文
补码的特点:
1. 在补码表示中,用符号位表示数值的正负,形式与原码的表示相同,即0为正,1为负。但补码的符号可以看做是数值的一部分参加运算。
正数的补码表示就是其本身,负数的补码表示的实质是把负数映像到正值区域,因此加上一个负数或减去一个正数可以用加上另一个数(负数或减数对应的补码)来代替。
从补码表示的符号看,补码中符号位的值代表了数的正确符号,0表示正数,1表示负数;而从映像值来看,符...
阅读全文
一、十进制与二进制的相互转换
1. 十进制转换为二进制,分为整数部分和小数部分。
整数部分采用除2倒取余法,具体做法:用2去除十进制整数,可以得到一个商和余数;在用2去除商,又会得到一个商和余数,如此进行,知道商为0时为止,然后把先的到的余数作为二进制的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
小数部分采用乘2取整法,具体做法:用2乘十进制小数,可以得到积,将积中的整...
阅读全文
在C语言程序中,给定一个类型,如何计算这个类型变量的取值范围呢?比如有一个字符型变量定义如下:
signed char c;
这个字符变量c的取值范围是【-128,127】,是计算出来的呢?
假设字符型变量占用一个字节,也就是8bit。由于是“signed”,也就是有符号的,也就是可以是正数,也可以是负数,那么8bit中的最高位就是表示符号位。符号位是“1”,就表示是负数,符号位是“0”,就表示是正数。先来看看符号位是“1”的情况...
阅读全文
我们用C语言编写程序时,经常会用到“scanf”、“printf”等函数,这可是经典的输入输出函数。在Win上编程时会用到,在Linux上编程时会用到,在Mac上编程也会用到。你看,在这么多系统平台上都会用到C语言的“scanf”、“printf”函数,你有没有想过为啥它们不需要做任何修改就能用了?通吃大部分的平台啊!
因为“scanf”、“printf”等函数属于I/O函数,是C语言标准函数库的一部分。本文就来和你聊聊标准函数库的“标准”到底标准在哪...
阅读全文