在qtcentre中看到有網友問這樣乙個問題:
why this doesn't work?在qt中用了二三年c++了,還真沒想過c++中的這麼乙個簡單的語句是怎麼工作的:qdebug() << "test" << std::endl;
std::endl 是乙個模板函式的函式指標
template basic_ostream& endl ( basic_ostream& os );看看gcc中的具體實現
templateinline basic_ostream<_chart, _traits>&<< 原本是移位操作符,毫無疑問這兒是過載以後的:endl(basic_ostream<_chart, _traits>& __os)
typedef basic_ostream<_chart, _traits> __ostream_type;這樣以來我們就是它是怎麼工作的了。也知道下面兩個也就等價了__ostream_type&
operator<<(__ostream_type& (*__pf)(__ostream_type&))
std::cout除此之外,還有一些帶引數的 manipulator,比如:std::cout《這又是神馬東西(反正不像是函式指標了)?
inline _setw
setw(int __n)
; }
struct _setw ;
templateinline basic_ostream<_chart, _traits>&operator<<(basic_ostream<_chart, _traits>& __os, _setw __f)
void qdebug(const char *, ...);qdebug qdebug();
#ifdef qt_no_debug_outputqinstallmsghandler 設定的是乙個靜態的函式指標變數(handler):# define qdebug while(false)qdebug
#endif
typedef void (*qtmsghandler)(qtmsgtype, const char *);qdebug 和這個東西是怎麼聯絡上的?static qtmsghandler handler = 0;
qtmsghandler qinstallmsghandler(qtmsghandler h)
void qdebug(const char *msg, ...)
static void qt_message(qtmsgtype msgtype, const char *msg, va_list ap)
void qt_message_output(qtmsgtype msgtype, const char *buf)我們似乎很少(fix me)直接使用這個類,一般都是通過qdebug()生成乙個物件來使用else
...
qdebug qdebug()有意思的一點:這樣使用時,只有當qdebug析構時,才會將內容輸出(看到前面提到的qt_message_output了吧?):
inline ~qdebug()流操作符delete stream;
}}
同一開始提到的c++標準庫中的流操作符一樣,在這兒我們也可以使用不帶引數的和帶引數的流操作符(注意endl和std::endl的區別):
qdebug()return *this;}inline qdebug &operator<<(qtextstreammanipulator m)
typedef qtextstream & (*qtextstreamfunction)(qtextstream &);qdebug::space()等class qtextstreammanipulator
;
qdebug的三個成員函式看manual總覺得暈乎乎的,看**就很直觀了
class qdebugfrom:inline qdebug &nospace()
inline qdebug &maybespace()
Qt中qDebug 的學習
1.qdebug 的幾種總結 1.include qdebug 字串 endl 2.include int num 20 char str 20 hello world qdebug 如果只寫在括號裡,是不需要qdebug標頭檔案的 d s num,str 3.class teacher qstri...
qDebug使用方法
首先在標頭檔案中包含 include 在需要使用的地方插入 qdebug x d x 輸出結果 x 0 注 a,a 讀入乙個浮點值 僅c99有效 c 讀入乙個字元 d 讀入十進位制整數 i 讀入十進位制,八進位制,十六進製制整數 o 讀入八進位制整數 x,x 讀入十六進製制整數 s 讀入乙個字串,遇...
qdebug使用方法
qdebug使用方法 首先在標頭檔案中包含 include 在需要使用的地方插入 qdebug intensity d intensity 0 2 d表示整數 輸出結果 intensity 195 注 a,a 讀入乙個浮點值 僅c99有效 c 讀入乙個字元 d 讀入十進位制整數 i 讀入十進位制,八...