标签:version shift nbsp 选中 std strong warning es2017 oss
1 int xfun(int *a,int n) 2 { 3 int x = *a;//a的类型是int *,a+1跳动一个int的长度 4 for (int *pa = a + 1; pa < a + n; pa++)//指向同一个类型的指针比较大小,相减是两者之间的元素个数 5 { 6 //string s = pa - a;// string接受const char*的单参构造函数不是explicit的,但编译器不能把int转换为string类型 7 decltype(pa - a) t; 8 int arr[3][4]; 9 decltype(arr) Type; 10 float f = pa - a;//因为float是四个字节,有效数字为6为,int转换为float可能丢失精度 11 cout << *pa << endl; 12 if (*pa > x) 13 x = *pa; 14 } 15 return x; 16 } 17 int main() 18 { 19 int x[5] = { 23, 46, 78, 55, 16 }; 20 cout<<xfun(x, 5); 21 }
以上代码可讨论几个问题,记录在下面。这段代码的功能是找出数组中的最大值,用x记录比较过程,x初始为a[0],从第二个元素开始比较,比x大,x值就更新,遍历完数组,x就是最大的。
1、std::string编译器是不认识的,只认识int,float,int*等类型,string在编译器里的类型是std::basic_string<char,std::char_traits<char>,std::allocator<char> > ;
2、pa(搜狗中文输入状态下输入“pa”,按下Enter是选中英文字符,按下空格键是选中“怕”,按下shift是选中英文字符,且切换到英文状态 ),如下图所示:
3、string的单参ctr接受const char*,但不接受int,这个ctr不是explicit的,不能把int隐式转换为string
4、怎么获得两个指针相减的结果类型?即获取表达式的类型,用decltype,不计算表达式的值,只得到类型,如图:
指针相减的类型为ptrdiff_t ,这是一个signed int,如上图所示
arr的类型是二维数组,arr+1是跳一个二维数组的长度,即12个int大小
5、int和float在32位下为4个bytes,float有效数字为6位,int转换为float可能会丢失精度,warning C4244: ‘initializing‘ : conversion from ‘int‘ to ‘float‘, possible loss of data;int赋值给double,后者为8个字节,足够装下所有的int,warning就会消失了。
6、pa<pa+n,pa满足循环条件的最大值为pa+n-1,pa+0就是pa,指向a[1],pa+n-1指向数组的最后一个元素
标签:version shift nbsp 选中 std strong warning es2017 oss
原文地址:http://www.cnblogs.com/hchacha/p/7669177.html