• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Bjarne Stroustrup的FAQ:C++的风格与技巧

发布: 2008-4-23 15:44 | 作者: 不详 | 来源: www.wushuang.net | 查看: 121次 | 进入软件测试论坛讨论

领测软件测试网



C++显式地允许delete操作将操作数左值置0,而且我曾经希望C++的实现能够做到这一点,但这种思想看来并没有在C++的实现中变得流行。

如果你认为指针置0很重要,考虑使用一个销毁的函数:

template<class T> inline void destroy(T*& p) { delete p; p = 0; }

考虑一下,这也是为什么需要依靠标准库的容器、句柄等等,来将对new和delete的显式调用降到最低限度的另一个原因。

注意,通过引用来传递指针(以允许指针被置0)有一个额外的好处,能防止destroy()在右值上(rvalue)被调用:

int* f();
int* p;
// ...
destroy(f()); // 错误:应该使用一个非常量(non-const)的引用传递右值
destroy(p+1); // 错误:应该使用一个非常量(non-const)的引用传递右值

我能够写“void main()”吗?

这种定义:

void main() { /* ... */ }

在C++中从未被允许,在C语言中也是一样。参见ISO C++标准3.6.1[2]或者ISO C标准5.1.2.2.1。规范的实现接受这种方式:

int main() { /* ... */ }



int main(int argc, char* argv[]) { /* ... */ }

一个规范的实现可能提供许多版本的main(),但它们都必须返回int类型。main()返回的int值,是程序返回一个值给调用它的系统的方式。在那些不具备这种方式的系统中,返回值被忽略了,但这并不使“void main()”在C++或C中成为合法的。即使你的编译器接受了“void main()”,也要避免使用它,否则你将冒着被C和C++程序员视为无知的风险。

在C++中,main()并不需要包含显式的return语句。在这种情况下,返回值是0,表示执行成功。例如:

#include<iostream>

int main()
{
std::cout << "This program returns the integer value 0\n";
}

注意,无论是ISO C++还是C99,都不允许在声明中漏掉类型。那就是说,与C89和ARM C++形成对照,当声明中缺少类型时,并不会保证是“int”。于是:

#include<iostream>

main() { /* ... */ }

是错误的,因为缺少main()的返回类型。

为什么我不能重载点符号,::,sizeof,等等?

大多数的运算符能够被程序员重载。例外的是:

. (点符号) :: ?: sizeof

并没有什么根本的原因要禁止重载?:。仅仅是因为,我没有发现有哪种特殊的情况需要重载一个三元运算符。注意一个重载了 表达式1?表达式2:表达式3 的函数,不能够保证表达式2:表达式3中只有一个会被执行。

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网