抱歉,如果之前有人問過這個問題,但我找不到任何答案。如果有人可以啟發我這里發生了什么?
我在玩 Qt 和標準 C 。所以下面的payground代碼沒有達到我的預期。那是相關的 QCoreApplication 佇列嗎?我預計陣列大小之前1 2 3 4 5的序列是: 5并且作為第一個執行的操作?
感謝您的幫助。
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
#include <algorithm>
#include <array>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "hello";
std::array<int, 5> vals {1,2,3,4,5};
for (auto& v: vals) {
qInfo() << v;
}
auto* vals_ptr = vals.data();
qInfo() << *(vals_ptr 1);
qInfo() << *(vals_ptr 2);
auto print = [](const int& n) { std::cout << " " << n; };
std::for_each(vals.cbegin(), vals.cend(), print);
qInfo() << "array size is: " << vals.size();
return a.exec();
}
下面的輸出
1 2 3 4 5hello
1
2
3
4
5
2
3
array size is: 5
uj5u.com熱心網友回復:
從檔案開始qInfo:
使用資訊性訊息訊息呼叫訊息處理程式。如果尚未安裝訊息處理程式,則訊息將列印到 stderr。在 Windows 下,如果是控制臺應用程式,則將訊息發送到控制臺;否則,它被發送到除錯器。在 QNX 上,訊息被發送到 slogger2。如果在編譯期間定義了 QT_NO_INFO_OUTPUT,則此函式不執行任何操作。
換句話說,qInfo寫入stderr. std::cout寫入stdout. 那是兩個獨立的流。只有在一個流中,輸出是有序的。由于緩沖,流可以交錯。
uj5u.com熱心網友回復:
不同的流有不同的緩沖區和不同的緩沖策略。如果它們最終輸出到同一個地方(即您的終端),并且您不小心混合它們,您的輸出可能會變得混亂,因為重繪 任何特定緩沖區緩沖區的時刻可能是不可預測的(或者只是不方便)。為避免這種情況,請在<< std::flush每次切換流時使用。
qDebug() << "hello" << std::flush; // different stream coming forth
for (auto& v: vals) {
qInfo() << v; // continuing with qInfo(), no flush here
}
qInfo() << flush; // different stream coming forth
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369662.html
上一篇:把最值錢的東西放在一個盒子里
