私は各[Modern C++スタイル]にaを使用しようとしていましたが、コードは毎回クラッシュしました!後で私の驚きのうち、私は内部のデータがあるのに形式で返さQStringListが無効であるか、完全に独立したオブジェクトのいずれかであることを発見しメンバfunc形式()の各呼び出しで、QMimeDataが無効なQStringListを返すのはなぜですか?
for(auto &k:mimeData->formats())
{ ... }
同じであるべき: それはのようなものでした!私は内部的に何が起こっているかを決めるカント右辺値参照を取るまで、またはしない限り、
false
false
true
OMG! is it empty? -> true
: は、だから私はもっと簡単な例では把握することを試みた:
#include <iostream>
#include <string>
#include <list>
#include <QCoreApplication>
#include <QMimeData>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cout<<boolalpha;
list<string> ls;
cout<<(ls.begin() != ls.end())<<"\n";
QStringList qsl;
cout<<(qsl.begin() != qsl.end())<<"\n";
QMimeData qme;
cout<<(qme.formats().begin() != qme.formats().end())<<"\n";
cout<<"OMG! is it empty? -> "<<qme.formats().empty()<<"\n";
return a.exec();
}
出力のようなものです!
Qtのforeachではなく、ループベースの範囲で使用するソリューションが本当に必要です!
P.S.私はO(n)を避けるためにそれをコピーしたくない。
オブジェクトを左辺値参照として保持してもオブジェクトは存続しますか? LIKE: '{ 自動&& formatList = mimeData->フォーマット(); ... //ブロックの終わり } ' –
@pPanda_beta - ローカル(破棄された)変数への参照を使用しているので、それは保証されていません。 RVOを使用する通常の変数に割り当てると、オブジェクトは呼び出しの代わりに作成されます(このように考える)。 – hauron