草庐IT

do_some_work

全部标签

C++11 基于范围的循环 : How does it really work

我知道这个循环是如何工作的,以及我如何在实际问题中使用它。但我想知道幕后发生了什么。我认为这个循环类似于常规的for循环,例如for(inti=0;i变量i只初始化一次,所以我认为这对于基于范围的循环也是一样的。但是如果我写这段代码:for(constintx:vec){cout编译器允许我这样做,但我不明白这是怎么可能的。如果变量x是const,为什么在每次迭代中x值都不同? 最佳答案 循环的每次迭代都会创建一个局部变量x并将其初始化为vec的下一个元素。当循环迭代结束时,x超出范围。单个x永远不会被修改。参见thislink为了

c++ - QtCreator : How do I register "override" and "final" as a keyword?

C++11(或C++0x)向C++引入了override和final关键字。很棒的东西,我们将使用它们来改进我们的代码。但是,虽然MSVisual-C++2010编译器完美地处理了关键字,但QtCreator(我选择的IDE)却完全被它们搞糊涂了。override方法被标记为错误,而且——更糟糕的是——所有代码导航功能或符号代码搜索都被完全搞砸了。:(我的问题就这么多了。我的问题如上:如何教QtCreator将override和final识别为关键字?谢谢!--罗宾PS:我使用QtCreator2.3,AFAIK的最新稳定版本。编译器为MSVC2010。 最

c++ - noexcept 运算符和 enable_if_t : do they work together?

考虑以下类:structS{templatestd::enable_if_t::value>f()noexcept{}templatestd::enable_if_t::value>g()noexcept{}};正如预期的那样,编译:s.f();这个不是:s.g();令我困惑的是,下面的main是用GCC(6.2)编译的,而不是用clang(3.9)编译的:intmain(){static_assert(noexcept(&S::f),"!");static_assert(noexcept(&S::g),"!");}我会说第二个断言失败是因为特化无效。两个编译器不同意这一点。哪个是正确

c++ - 在 C++ 中将 lambda 表达式作为成员函数指针传递

我有一个框架函数,它需要一个对象和一个成员函数指针(回调),如下所示:do_some_work(Object*optr,void(Object::*fptr)());//willcall(optr->*fptr)()如何将lambda表达式传递给它?想做这样的事情:classMyObject:publicObject{voidmystuff(){do_some_work(this,[](){/*thislambdaIwanttopass*/});}};这一切的意义在于不要用回调扰乱MyObject类的接口(interface)。UPD我无法以任何方式改进do_some_work,因为我

c++ - C/C++ : -msse and -msse2 Flags do not have any effect on the binaries?

我只是在玩弄gcc(g++)和编译器标志-msse和-msse2。我有一个看起来像这样的小测试程序:#includeintmain(intargc,char**argv){floata=12558.5688;floatb=6.5585;floatresult=0.0;result=a*b;std::cout当我用下面的语句编译它时:/usr/local/bin/g++-4.9-W-mssemain.cpp-otestsse和/usr/local/bin/g++-4.9-W-msse2main.cpp-otestsse2输出文件是二进制相等的。但由于SMID标志,我预计它们并不相同。所以

c++ - 在 VC2015 中连接不匹配的字符串 WORKS - 如何?

当我们有这些之一时:autocity1="New"L"Delhi";autocity2=L"New""York";任何VS2015之前的编译器都会引发错误:errorC2308:concatenatingmismatchedstrings但是使用VC2015编译器,它编译得很好并且结果类型(auto推导)是一个宽字符字符串。我的问题是:何时以及如何做到这一点-任何标准规范? 最佳答案 在C++03中,此行为是未定义的。ISO14882-2003:2.13.4.3指出Intranslationphase6(2.1),adjacentn

c++ - QSettings(Qt 5.4) : setValue doesn't work properly

在我的.cpp中,我正在使用QSettings。这以前在Qt4.8中有效:#include----------QSettingssettings;settings.setValue("time_axis_direction",1);inttest_var=settings.value("time_axis_direction").toInt();----------test_var程序返回0,请问是什么原因?我将Qt与VS插件一起使用。 最佳答案 根据docs,你必须设置组织名称和应用程序名称:QCoreApplication::s

c++ - boost ASIO async_read_some

我在实现一个简单的TCP服务器时遇到了困难。以下代码摘自boost::asioexamples,准确地说是“Http服务器1”。voidconnection::start(){socket_.async_read_some(boost::asio::buffer(buffer_),boost::bind(&connection::handle_read,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));}voidconnection::ha

C++11 原子 : why does this code work?

让我们采用这个结构:structentry{atomicvalid;atomic_flagwriting;charpayload[128];}两个线程A和B以这种方式同时访问这个结构(让e成为entry的一个实例):if(e.valid){//dosomethingwithe.payload...}else{while(e.writing.test_and_set(std::memory_order_acquire));if(!e.valid){//writee.payloadonebyteatatime//(thepayloadwrittenbyAmaybedifferentfrom

C++ 线程 : what does join do exactly?

这个问题在这里已经有了答案:Whatdoesstd::thread.join()do?(4个答案)关闭6年前。以下代码来自Dashstd::thread的示例.#include#include#includevoidfoo(){//simulateexpensiveoperationstd::this_thread::sleep_for(std::chrono::seconds(1));}voidbar(){//simulateexpensiveoperationstd::this_thread::sleep_for(std::chrono::seconds(1));}intmain(