看了下More Effective C++,做了点小结

今天主要是学习More Effective C++
1) 指针和引用的使用
指针:在对象为空时;不同的时刻指向不同的对象时
引用:总指向一个对象,并且一旦指向这个对象就不再改变时; 当时重载某个操作符时需要使用引用;
还有一个就是当对象为继承类,而参数为基类时,需要使用引用,防止其指向基类,而不是继承类对象
2) 使用C++风格的类型转换
static_cast< type >( expression ) 基本数值类型的转换
const_cast< >( )   转换const,volatileness
dynamic_cast< >( )  将指向基类的转换指向继承类
reinterpret_cast< >( ) 几乎是实现时定义,普通的用途是在函数指针类型间转换。
函数指针时: 例如 int something()
  typedef void (*FuncPtr)()
  FuncPtr p1 = reinterpret_cast<FuncPtr>(&something)
3) 在C++中一般希望数组中的对象都是一样的,因为他会根据大小来移位找到下一个对象,和其他脚本语言不一样。
尽量保证数组内的类型一样,且大小也一样。
4) 喜欢这段代码
class A
{
  A(int i);
}
// create the memory
void * rawMem = operate new[](10 * sizeof(A));
A * aa = static_cast<A*>(rawMem);
for( int i = 1; i < 10; ++i) {
  new (&rawMem[i]) A(ID);
}

//destruction
for( int i = 9; i >=0 ; --i) {
  aa[i].~A();
}

operate delete[](rawMem);
5) 操作符重载时一般定义成friend性质,为了使可以实现较好的隐形类型转换。
6) 前缀和后缀的区别:
Int& operate++();  // ++前缀
const Int operate++(int) // ++ 后缀
++i;  // i.operate++()
i++;  // i.operate++(0)
7) 最好不要重载内建类型&& || 等
不能重载的有: . * :: ?: new delete sizeof typeid等
8) C++异常问题:
try{
}
catch(Exception e){
}
finally{
}
  C++使用异常的不是很多,只有在必须要使用异常时才使用。
  有很多在构造函数中使用异常,防止构造时就出现问题。
  而在析构函数里最好不要抛出异常,防止发生内存泄漏等。
  如果有异常抛出,最终一般会使C++调用terminate函数,终止程序。
  异常抛出的对象必须被复制,不管是值传递还是引用传递。对象被拷贝的是静态类型,不管他的动态类型是什么。
例子:
catch (Widget& w) // 捕获Widget异常
  {
   ... // 处理异常
   throw; // 重新抛出异常,让它
  }    // 继续传递
  catch (Widget& w) // 捕获Widget异常
  {
   ... // 处理异常
   throw w; // 传递被捕获异常的
  }         // 拷贝
区别:
  第一个是抛出原来的,没有拷贝
  第二个是抛出一个复制对象,且类型为Widget
  在函数调用中不允许转递一个临时对象到一个非const引用类型的参数里(参见条款19),但是在异常中却被允许。
异常:推荐使用引用传递的方式
9) 异常规格:
当函数什么都没声明时表示可以抛出任何异常
如: extern void f1();
如果是只能抛出int类型的异常:
如: extern void f1() throw(int);
当不抛出任何异常的时候可以如下使用:
如: extern void f1() throw();
异常时需要时间代价的
10)代码效率问题
牢记: 80-20准则
11)考虑使用lazy evaluation,使用时复制方式
12) lazy calculate方式与over-eager calculate方式
13)通过重载避免隐式类型转换
推荐使用+= -= 而不是使用 + -
14)虚拟函数的使用
一般使用virtual table -> vtbl
vitual table poinsters -> bptr
虚函数一般不要声明为inline函数,因为它是动态绑定的,和静态绑定inline方式不一样。
15)虚拟构造函数和非成员函数等


总结:
1) 学会经常使用typedef,尤其是在类里,可以很好进行改进
2) strlen(NULL) 动作不确定,  delete NULL;  没问题,可以
3) 语言内置关键字: sizeof new

还没有全部完成,后续继续写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更有效的C指的是更有效地使用C语言编程的技巧和技术。C语言是一种古老但广泛使用的编程语言,它在系统级编程和高性能应用程序开发中具有广泛的应用。 首先,更有效的C编程意味着更优化的代码。程序员可以通过使用更高效的算法和数据结构来提高代码的性能。此外,还可以通过减少变量的使用、优化内存管理和减少函数调用等方式来提高代码的效率。 其次,更有效的C编程还包括更好的代码组织和结构。通过使用适当的模块化和抽象化技术,可以使代码更可读和可维护。良好的代码结构可以提高团队合作的效率,并减少错误和调试的时间。 另外,更有效的C编程也体现在更好的错误处理和异常处理机制。通过正确处理错误和异常,可以提高程序的健壮性和可靠性。这包括使用适当的错误代码和错误消息来有效地调试和定位问题。 此外,编写高效的C代码还需要充分利用编译器的优化功能。通过了解编译器的工作原理和使用适当的编译选项,可以提高代码的执行速度和运行效率。 最后,更有效的C编程还需要注重维护和优化代码。程序员需要根据需求和反馈周期性地进行代码优化和重构。这可以帮助改进代码的可读性、可维护性和性能。 总的来说,更有效的C编程意味着更优化的代码、更好的代码组织和结构、更好的错误处理和异常处理、充分利用编译器的优化功能以及定期的代码维护和优化。通过这些技术和实践,可以提高C编程的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值