草庐IT

c++ - 为什么 Visual C++ 2010 提示 'Using uninitialized memory' ?

我有一个函数,它接受一个指向缓冲区的指针,以及该缓冲区的大小(通过指针)。如果缓冲区不够大,它会返回一个错误值并在输出参数中设置所需的长度://FillBufferisdefinedinanothercompilationunit(OBJfile).//Wholeprogramoptimizationisoff.intFillBuffer(__int_bcount_opt(*pcb)char*buffer,size_t*pcb);我这样调用它:size_tcb=12;char*p=(char*)malloc(cb);if(!p)returnENOMEM;intresult;for(;;

c++ - 由于抽象模板 arg 的实例化,boost::lambda 表达式无法编译。任何解释和/或解决方法?

我正在学习boost::lambda,并且我已经设法创造了一个我目前所知道的无法解决的情况。显然在boost::lambda的内部,以下示例导致尝试实例化抽象类AbstractFoo,并阻止lambda表达式编译。问题是我不知道它为什么要实例化它,所以我无法尝试解决它。​​任何boost::lambda专家都可以:请告诉我为什么会这样?建议解决方法?例子:#include#include#include#includestructAbstractFoo{typedefboost::shared_ptrPtr;virtualintit()const=0;};structBar:publi

c++ - COM 互操作 : how to use ICustomMarshaler to call 3rd party component

我想使用COM互操作从C#调用COM组件中的方法。这是方法签名:longGetPrecursorInfoFromScanNum(longnScanNumber,LPVARIANTpvarPrecursorInfos,LPLONGpnArraySize)这是在C++中调用它的示例代码(我检查过它确实有效):structPrecursorInfo{doubledIsolationMass;doubledMonoIsoMass;longnChargeState;longnScanNumber;};voidCTestOCXDlg::OnOpenParentScansOcx(){VARIANTv

c++ - 链接错误 : Boost Library on Windows using MinGW

我正在使用Windows764x并安装了MinGW。我的目标是在Eclipse上使用boost库(此处:boost_program_options)。boost库已正确安装,我可以在C:\MinGW\boost_1_53_0\stage\lib下看到文件libboost_program_options-vc90-mt-gd-1_53.lib>我现在尝试通过转到Properties->C/C++Build->Settings->MinGWC++Linker->Libraries在Eclipse中链接它:我在这里输入库搜索路径(-L):C:\MinGW\boost_1_53_0\stage

c++ - 用于测试 func(args) 是否格式正确且具有必需的返回类型的特征

有许多类似的问题/答案,但我无法完全将这些答案放在一起来满足我的目的。我想要一个特质templatestructreturns_a{staticconstboolvalue;};这样returns_a::value如果F(Args)格式正确并返回T,则为真。经过更多研究后,我的工作方式如下://valueistrueifFunc(Args...)iswellformedtemplateclassis_callable{templatestaticdecltype(std::declval()(std::declval()...),void(),0)test(int);templates

c++ - VC++ 2013 : using-declaration + redefinition of member function leads to compile error

我想通过指定策略允许修改我的类的行为。该策略应该用作boost::variant的访问者。有适合大多数情况的默认策略,但用户可能需要添加或替换一些重载。我发现vc++2013没有编译此代码并出现错误C3066:Therearemultiplewaysthatanobjectofthistypeofcanbecalledwiththesearguments。相同的代码在gcc和clang中按预期编译和工作。是vc++2013的错误吗?#includestructDefaultPolicy{voidoperator()(bool){std::coutUPD这个例子适用于vc++2010。看

c++ - 线程构建 block : Deadlocks because all threads used up

在英特尔线程构建block框架中,如何确保所有线程不忙于等待其他线程完成。例如考虑以下代码,#include#include#include#include#includestd::futurerun_something(std::functionfunc,boolb){autotask=std::make_shared>(std::bind(func,b));std::futureres=task->get_future();tbb::task_groupg;g.run([task](){(*task)();});returnres;};intmain(){tbb::parallel

c++ - [conv]/6中语句 "The expression e is used as a glvalue if and only if the initialization uses it as a glvalue"的确切含义是什么

[conv]/6(重点是我的):Theeffectofanyimplicitconversionisthesameasperformingthecorrespondingdeclarationandinitializationandthenusingthetemporaryvariableastheresultoftheconversion.TheresultisanlvalueifTisanlvaluereferencetypeoranrvaluereferencetofunctiontype([dcl.ref]),anxvalueifTisanrvaluereferencetoob

c++ - "Include What you use"

我读到了一个名为"include-what-you-use"的工具这可以帮助清理多余的包括从源代码。我知道有一个编译器LLVM(clang)版本和一个GCC版本。我的问题是:为什么这个工具依赖于编译器而不是“跨平台”的编译器。为什么从一开始工具的创建者就没有让它独立于编译器?是否与它的特殊实现或类似的东西有关?如果我想采用与LLVM兼容的工具版本,并且我想让它与GCC兼容(因为我正在使用GCC),我需要为此做什么? 最佳答案 在大多数情况下,Include-What-You-Use应该能够处理任何有效的C++代码库,无论该代码库是使

c++ - 将 `_[a-z0-9]`开头的标识符以 `using`导入全局命名空间是否定义明确?

整个问题都符合标题。C++14[global.names]是这样说的Eachnamethatbeginswithanunderscoreisreservedtotheimplementationforuseasanameintheglobalnamespace.但我不太清楚是否遵循namespaceN{void_foo(){}}usingN::_foo;是否违反规则。 最佳答案 这不是很明显吗?您的代码将一个以下划线开头的名称放入全局namespace,这些名称保留供实现使用。不要那样做。如果实现在全局命名空间中有_foo,这将产生