首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中,你几乎一直在做什么?

在C++中,你几乎一直在做什么?
EN

Stack Overflow用户
提问于 2008-11-25 00:30:41
回答 10查看 754关注 0票数 5

当我在C++中组合一个类时,我几乎总是会做一些事情。

1)虚拟析构函数2)复制构造函数和赋值运算符(我要么通过一个称为Copy()的私有函数来实现它们,要么将它们声明为私有,从而显式地禁止编译器自动生成它们)。

你发现什么东西几乎总是有用的?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-11-25 00:52:39

我发现打开-Wall-Werror和(这是一个有趣的) -Weffc++的gcc标志可以帮助捕捉到很多潜在的问题。从gcc手册页:

-Weffc++ (仅限C++ )警告违反Scott Meyer的Effective C++一书中的以下样式准则:·第11项:为具有动态分配内存的类定义复制构造函数和赋值运算符。·第12项:在构造函数中首选初始化而不是赋值。·第14项:在基类中将析构函数设为虚的。·第15项:让"operator=“返回一个对*this的引用。·第23项:当必须返回对象时,不要尝试返回引用。关于违反Scott Meyer的More Effective C++一书中的以下风格准则:·项目6:区分递增和递减运算符的前缀和后缀形式。·第七项:永远不要重载"&&“、"││”或",“。如果您使用此选项,您应该意识到标准库头文件并不遵守所有这些准则;您可以使用grep -v来过滤掉这些警告。

票数 10
EN

Stack Overflow用户

发布于 2008-11-25 01:49:50

奇怪的是,这里的大多数建议都是我特别不会做的。

  • 我不会让dtors变成虚拟的,除非我专门把它设计成继承的。它增加了很多开销,并阻止了自动内联,这很糟糕,因为大多数ctor无论如何都是空的(而且很少有类从继承中受益)
  • 我不会进行复制ctor/赋值操作,除非缺省值不起作用--如果不起作用,我可能会重新考虑设计。记住,在string和vector之间,几乎再也没有理由调用new了。创建你自己的复制ctor,和默认的一样,效率几乎肯定会更低。

  • ,我不会添加字符串转换。它导致了太多的问题,在你不想要的地方,强制转换被静默地调用。最好添加一个ToString()方法。
  • 我不添加朋友oper<<,因为朋友是邪恶和混乱的。最好添加一个Display(ostream)方法。然后oper<<可以调用它,而不需要成为朋友。实际上,您可以使oper<<成为调用Display()的模板函数,而再也不用担心它了。
票数 14
EN

Stack Overflow用户

发布于 2008-11-25 01:11:09

当我把一个类放在一起时,我做的第一件事就是在它上面放一些doxygen注释,说明它为什么存在以及它做了什么。

我曾经在一个小组项目中工作,他们说他们想在项目结束时记录这些东西。而且稍后将注释放入代码中也是一团糟。我不想让这种事情再次发生。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/315987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档