找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1804|回复: 4

请教关于assert和explicit

[复制链接]
发表于 2009-10-31 01:07:04 | 显示全部楼层 |阅读模式 IP:江苏扬州
最近看到头文件assert.h和关键字explicit,前者是针对出错吧?它注释说当遇到逻辑上的错误就终止,到底怎么终止?关键字的注释小弟没看懂,能举个例子吗?
class vect { public: explicit vect(int i=0); //不转换类型从int到vect,什么意思难道其它构造函数都转换吗? ...};
发表于 2009-10-31 01:07:05 | 显示全部楼层 IP:江苏扬州
小弟刚学C++不久,我要说一下assert
assert是断言, 是帮助开发者查找错误的.一般在DEBUG是使用.是一个宏.
如:
assert(p != NULL);
假设指针p不是指向NULL的话(即为true),程序什么事都没有,继续跑
但是如果括弧里面的值为false的话, 就会跳出错误窗口,并且会写明在哪行错了,然后各位大哥可以用Ctrl + g输入
行数,立刻找到.哈哈.
断言大多在函数的入口处和出口出设置,这是一种很好的检测错误的方法.
不过比较麻烦,不如直接使用断点加quick watch,然后单步执行的方法来得方便
explicit小弟见过,但是没用过,所以不敢在这吹,请那位高手来详细说明一下.
回复

使用道具 举报

发表于 2009-10-31 01:07:06 | 显示全部楼层 IP:江苏扬州
楼上说的基本正确
关于explicit,我归纳不好,我从msdn上给你摘了,看看他们怎么说
先贴英语,我再给你翻译成汉语
explicit C++ Specific
This keyword is a declaration specifier that can only be applied to in-class constructor declarations. Constructors declared explicit will not be considered for implicit conversions. For example:
class X { public: explicit X(int); //legal explicit X(double) { //legal // ... } };
explicit X::X(int) {} //illegal An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object. For
example, with the class declared above:
void f(X) {} void g(int I) { f(i); // will cause error } void h() { X x1(1); // legal } The function call f(i) fails because there is no available implicit conversion from int to X.
Note It is meaningless to apply explicit to constructors with multiple arguments, since such constructors cannot take part in implicit conversions.
回复

使用道具 举报

发表于 2009-10-31 01:07:07 | 显示全部楼层 IP:江苏扬州
我的翻译:
explicit C++ 约定
此关键字是一个声明约定,只能用于在类内的构造函数的声明。声明了explicit的构造函数
不能用于隐式转换。比如:
class X { public: explicit X(int); //合法 explicit X(double) { //合法 // ... } };
explicit X::X(int) {} //非法,因为声明用在类外了
一个explicit构造函数不能用于隐式转换.它只能用于显式的构造一个对象.比如,用上面的
类的声明:
void f(X) {} void g(int I) { f(i); // 将引起错误 } void h() { X x1(1); // 合法 } 函数调用 f(i)失败,因为没有从int型到X型的隐式转化。
注意: 把explicit应用于多参数构造函数是没有意义的, 因为这样的构造函数不能用于隐
式转换。
回复

使用道具 举报

发表于 2009-10-31 01:07:08 | 显示全部楼层 IP:江苏扬州
谢谢两位,前两天没空上来。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:31 , Processed in 0.107259 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表