草庐IT

T_OLD_FUNCTION

全部标签

c++ - "pure virtual function called"在 gcc 4.4 上,但不在新版本或 clang 3.4 上

我有一个MCVE,它在使用g++4.4.7版编译时在我的一些机器上崩溃,但可以在clang++3.4.2版和g++6.3版中使用。我想知道它是来自未定义的行为还是来自这个古老版本的gcc的实际错误。代码#includeclassBaseType{public:BaseType():_present(false){}virtual~BaseType(){}virtualvoidclear(){}virtualvoidsetString(constchar*value,constchar*fieldName){_present=(*value!='\0');}protected:virtu

c++ - 将带有所有参数的成员函数传递给 std::function

如何从成员函数创建std::function而无需键入std::placeholders::_1、std::placeholders::_2等-我想“占位”所有参数,只保存对象本身。structFoo{intbar(int,float,bool){return0;}};intbaz(int,float,bool){return0;}intmain(){Fooobject;std::functionfun1=baz;//OKstd::functionfun2=std::bind(&Foo::bar,object);//WRONG,needsplaceholders}我不想在这个阶段提供参

c++ - 在 std::function 中存储函数指针

我正在尝试围绕dlopen()/dlsym()编写一个C++0x包装器,以从共享对象动态加载函数:classDynamicLoader{public:DynamicLoader(std::stringconst&filename);templatestd::functionload(std::stringconst&functionName);private:void*itsLibraryHandle;};DynamicLoader::DynamicLoader(std::stringconst&filename){itsLibraryHandle=dlopen(filename.c_

c++ - 内联失败 : function body can be overwritten at link time

我今天从我认为具有g++-4.6的Ubuntu12.04升级到具有g++-4.7.2的Ubuntu12.10。在我的代码中,我有几个函数标记为__attribute__((always_inline))。原因很简单,分析向我展示了它显着提高了代码的性能。它在g++4.6上运行良好,但现在在g++4.7上我收到错误消息:error:inliningfailedincalltoalways_inline'voidfunc_name(args)':functionbodycanbeoverwrittenatlinktime我无法分享我的实际代码,我试图缩小范围,但是当我更改太多时,错误就会消

c++ - 为什么我们不能简单地复制 std::function

我问这个的原因是我需要将std::function存储在一个vector中,如果需要更多内存,我们公司内部的vector基本上是在做realloc。(基本上只是memcpy,不涉及复制/移动操作符)这意味着我们可以放入容器中的所有元素都必须是可简单复制的。这里有一些代码来演示我有问题的拷贝:void*func1Buffer=malloc(sizeof(std::function));std::function*func1p=new(func1Buffer)std::function();std::function*func2p=nullptr;*func1p=[](int){};cha

c++ - 是否有 std::function 的独立实现?

我正在开发嵌入式系统,因此代码大小是一个问题。使用标准库将我的二进制大小增加了大约60k,从40k增加到100k。我想使用std::function,但我不能证明它是60k的。是否有我可以使用的独立实现,或类似的东西?我正在使用它在c++11中使用绑定(bind)变量在成员函数中隐式转换lambda。 最佳答案 这是std::function-like类模板的简单实现,不包含任何标题。您可以根据需要自定义行为(如移动/前进、空调用响应等):live_demo//Scrolldownforexampleofusagenamespace

c++ - 当调用带有警告 "control reaches end of non-void function"的函数时,会发生什么(实际上)?

我知道这条消息的含义,我只是想知道为什么它不是错误消息,而只是警告?在这种情况下会发生什么?例如,假设我有一个函数intf(){}当我调用它时会发生什么?在这种情况下,编译器是否添加了“未初始化”int的返回?或者缺少返回可能会导致堆栈损坏?或者它(绝对)未定义的行为?用gcc4.1.2和4.4.3测试编辑:阅读答案我明白一件事,阅读评论-另一件事..好的,让我们总结一下:这是未定义的行为。那么,这意味着可能导致堆栈损坏,对吗?(这甚至意味着,我的电脑可能开始通过麦克风插孔向我扔烂番茄,尖叫着——“你做了什么???”)。但如果是这样,那么为什么这里的最高答案说,堆栈损坏不会发生,同时行

c++ - 是否存在函数指针未涵盖的 std::function 用例,或者它只是语法糖?

这个问题在这里已经有了答案:Whydoweusestd::functioninC++ratherthantheoriginalCfunctionpointer?[duplicate](3个回答)关闭9年前。与函数指针相比​​,std::function的符号非常好。但是,除此之外,我找不到不能用指针替换它的用例。那么它只是函数指针的语法糖吗? 最佳答案 std::function为您提供封装任何类型的可调用对象的可能性,这是函数指针无法做到的(尽管确实可以将非捕获lambdas转换为函数指针).让您了解它可以实现的灵active:#

c++ - "local variables at the outermost scope of the function may not use the same name as any parameter"是什么意思?

我一直在阅读C++入门第5版。在第6.1章功能参数列表的第三段中。它写道“此外,函数最外层范围内的局部变量不得使用与任何参数相同的名称”。什么意思?我不是以英语为母语的人。我不明白函数的“最外层范围”的实际含义。 最佳答案 函数的最外层是定义函数体的block。您可以将其他(内部)block放入其中,并在该block的本地变量中声明变量。内部block中的变量可以与外部block中的变量或函数参数具有相同的名称;他们将名称隐藏在外部范围内。外部block中的变量不能与函数参数同名。演示:voidf(inta)//functionha

c++ - "Function has no address"尽管禁用了优化 (/Od)

在MSVC2012的调试过程中,我尝试从Watch窗口调用一些函数,以便将数据转储到文件中。但是,我不断收到此错误:FunctionMatrix::Savehasnoaddress,possiblyduetocompileroptimizations.Matrix类位于我自己的外部库中。快速检查表明,外部库中的所有方法都没有地址,并且所有从Watch调用它们的尝试都会返回此错误,但在头文件中定义的方法除外。主项目中的方法无论在哪里定义都有地址。当然,整个解决方案都禁用了优化。符号正常加载。我该如何解决? 最佳答案 到目前为止,我找到