博文

详解C语言的”endl“函数实现(2013-04-26 14:51:00)

摘要:在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
首先,endl是一个操作符(Manipulators),但我们必须知道endl是一个什么类型的变量。endl是跟在”<<“运算符后面,故endl应该是一个参数。其实endl是一个函数名,它是一个"<<"运算符重载函数中的参数,参数类型为函数指针。下面我们看下内部函数实现。

1 ostream& ostream::operator << ( ostream& (*op) (ostream&)) 2 { 3 // call the function passed as parameter with this stream as the argument

4 return (*op) (*this); 5 }

1 std::ostream& std::endl (std::ostream& strm) 2 { 3 // write newline

4 strm.put('\n'); 5 // flush the output buffer

6 strm.flush(); 7 // return strm to allow chaining

8 return strm; 9 }

可以看出,运算符重载函数中的函数参数为一个函数指针,其指向一个输入输出均为ostream类引用的函数。而endl正是这样一个函数。所以我们在运行"cout<<endl;"语句时,endl是一个函数参数,类型为函数指针。然后会执行”return (*endl) (*this);“语句,即执行endl函数。endl函数输出一个换行符,并刷新输出缓冲区。

这样我们知道在标准库中endl是作为一个函数实现的,显然我们也可以直接调用这一函数。我们看下......

阅读全文(1184) | 评论:0 | 复制链接

整理C++调试常用到的四个窍门笔记(2013-04-15 10:02:00)

摘要:首先,感谢你的阅读,本人观点:学习编程是个漫长的过程并不是一时就会很厉害的,关键是坚持,快乐地学习,在这里分享我的一些笔记给你;
一、C++编程-调试标记

适用预处理#define定义一个或多个调试标记,在代码中把调试部分使用#ifdef和#endif进行管理。当程序最终调试完成后,只需要使用#undef标记,调试代码就会消失。常用的调试标记为DEBUG, 语句序列:

1. #define DEBUG

2. #ifdef DEBUG

3. 调试代码

4. #endif

二、C++编程-运行期间调试标记

在程序运行期间打开和关闭调试标记。通过设置一个调试bool标记可以实现。这对命令行运行的程序更为方便。例如下面代码:

1. #include

2. #include

3. using namespace std;

4. bool debug =false;

5. int main(int argc,char*argv[])

6. {

7. for(int i=0;i

三、C++编程-把变量和表达式转换成字符串

可是使用字符串运算符来实现转换输出定义

1. #define PR(x) cout<<#x”=”<

四、C++编程-C语言的assert()

该宏在中,,当使用assert时候,给他个参数,即一个判读为真的表达式。预处理器产生测试该断言的代码,如果断言不为真,则发出一个错误信息告诉断言是什么以及它失败一会,程序会终止。

1. #include< assert>

2. using namsapce st......

阅读全文(926) | 评论:0 | 复制链接