C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点

C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患。正如人们的饮食,少食和暴食都不可取,应当恰到好处。 我们要辨证地看待 C++的新机制,应该恰如其分地使用它们。

虽然这会使我们编程时多 费一些心思,少了一些痛快,但这才是编程的艺术。

 1 #include <iostream>
 2
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5 int main(int argc, char** argv) {
 6         //定义一个包含指针成员的结构类型
 7     struct test {
 8        char *str;
 9        int  *ip;
10     } x;
11
12     //使用结构变量x中的整型指针ip
13     x.ip=new int;    //分配1个单元
14     *(x.ip)=100;
15     cout<<"x.ip:"<<x.ip<<‘\t‘<<*(x.ip)<<endl;
16     cout<<"---------------"<<endl;
17     delete x.ip;
18     x.ip=new int[5];    //分配5个单元
19     for(int i=0;i<5;i++)
20         *(x.ip+i)=100+i;
21     cout<<"x.ip:"<<endl;
22     for(int i=0;i<5;i++)
23         cout<<x.ip+i<<‘\t‘<<(*(x.ip+i))<<endl;
24     delete x.ip;
25     cout<<"---------------"<<endl;
26
27     //使用结构变量x中的字符型指针str
28     x.str=new char(‘A‘);    //分配1个单元
29     cout<<"x.str:"<<(*x.str)<<endl;
30     cout<<"---------------"<<endl;
31     delete x.str;
32     x.str=new char[5];    //分配多个单元
33     *x.str=‘G‘;
34     *(x.str+1)=‘o‘;
35     *(x.str+2)=‘o‘;
36     *(x.str+3)=‘d‘;
37     *(x.str+4)=‘\0‘;
38     cout<<"x.str:"<<x.str<<endl;
39     delete x.str;
40     cout<<"---------------"<<endl;
41
42     //在声明结构变量时初始化
43     test y={"Very Good!",NULL};
44     cout<<"y.str:"<<y.str<<endl;
45     cout<<"y.ip:"<<y.ip<<endl;
46     return 0;
47 }

原文地址:https://www.cnblogs.com/borter/p/9406534.html

时间: 2024-10-12 23:40:37

C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点的相关文章

Physics.Raycast重载方法的参数隐式转换引发的血案

我用Raycast检测两个物体是否碰撞,发现无论如何结果都不太对劲,ray貌似忽略了我设置的LayerMask 代码是这样的: Physics.RaycastAll(start, Vector3.down, 1 << mask); 看出来问题在哪里了么? 尼玛,根本没有Physics.Raycast(Vector3 start, out RaycastHit hit, int layerMask) 这样的重载好不好... 我不知道从哪儿得来的一个印象,觉得有这么一个重载,就一直在用. 但是为什

位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位清0(与0位与)且同时保留其它位不变(与1位与):获取某变量中某一位(与其位与后判断是否为该数) 2.|  按位或(双目): 将某变量中的某些位置1(与1位或)且保留其它位不变 3.^  按位异或(双目): 将某变量中的某些位取反(与1异或)且保留其它位不变 异或运算特点: 如果 a^b=c,那么就有 c^b = a以及c^a=b.(穷举法可证---用于

Access中多表内联的SQL写法

在Access中多表内联,可以使用传统的where条件逐行筛选,如: SELECT SNAME,CNAME,DEGREE FROM STUDENT,COURSE,SCORE where student.sno = score.sno and score.cno = course.cno 其中SCORE表是中间表,他用来连接STUDENT表和COURSE表 在只有三个表的时候这样写还可以,但是随着表的增多,这样写会越来越复杂,因此我们还可以使用inner join方法,如: SELECT SNAM

深入理解Scala中的隐式转换系统

博客核心内容: 1.Scala中的两种隐式转换机制以及隐式视图的定义方式 2.Scala中的隐式绑定可能所处的位置以及如何更好的使用隐式转换 3.Scala中的隐式转换相关操作规则 4.Scala中的隐式参数 5.Scala中的隐式类 6.Scala中的隐式对象 7.Scala中的两种隐式类型约束(结合Scala中的类型系统) 8.Predef类中的implicitly方法的用法介绍以及Ordering类型转化为Oredered类型的方式 1.Scala中的两种隐式转换机制以及隐式视图的定义方式

Scala 中的隐式转换 implicit

Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: v al x: Int = "100".toInt 如果想让字符串自动转换为整形,

Qt C++中的关键字explicit——防止隐式转换(也就是Java里的装箱),必须写清楚

最近在复习QT,准备做项目了,QT Creator 默认生成的代码 explicit Dialog(QWidget *parent = 0)中,有这么一个关键字explicit,用来修饰构造函数.以前在Windows下写程序的时候,基本上没有碰到这个关键字,那么这个关键字是做什么用的呢? 关键字 explicit 可以禁止“单参数构造函数”被用于自动类型转换,主要用于 "修饰 "构造函数. 指明构造函数只能显示使用,目的是为了防止不必要的隐式转化. 光看这一句似乎不太容易明白,下面,举

初探swift语言的学习笔记(可选类型?和隐式可选类型!)

可选类型.隐式可选类型 其次swift还引入一个较有趣的初始值设置语法使用"?"操作符及"!"号操作符 如:"var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = op

scala中隐式转换之隐式转换调用类中本不存在的方法

/** * Created by root * Description : 隐式转换调用类中本不存在的方法 */ class Person(name : String){ def getPersonName = println("name = " + name) } object Type2Type{ implicit def type2(a : ImplicitTest2) = new Person("xiaoming") } class ImplicitTest

21.C++- ++操作符重载、隐式转换之explicit关键字、类的类型转换函数

++操作符重载 ++操作符分为前置++和后置++,比如: ++a;  a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 前置++操作符的返回值为*this 后置++操作符的返回值为临时对象 例如: 转换规则如下所示: 比如: 隐式转换的隐患 隐式转换有时会因为类型不同,得到的结果大有不同,也是常见bug之一. 参考以下示例: 运行打印: 答案并非是-1000. 同样,我们使用构造函数时,也经常使用隐式转换 参考以下示