草庐IT

CALL_NON_FUNCTION_AS_CONSTRUCTOR

全部标签

c++ - 将固定大小内存边界上的 native 代码与 GCC/G++/AS 对齐?

我有一个C函数,其中包含将实现字节码解释器的字节码的所有代码。我想知道是否有一种方法可以在固定大小的边界上对齐内存中的编译代码段,以便我可以直接计算从字节码的值跳转到的地址?有点像数组的工作方式,但我不是从计算的地址读取,而是跳转到它。我知道我必须将执行下一个跳转的代码放在每个“字节码代码”段的末尾,并且我必须使边界大小至少与最大段的大小一样大.如果这甚至可能,我将如何告诉编译器/汇编器(gcc/g++/as)以所述方式对齐? 最佳答案 我意识到这并不是您所要求的,但这是使用GCC实现字节码解释器的标准方法。GCC的“compute

c++ - 从 AS3 学习 C++

我是一名优秀的AS3程序员。我从事游戏工作,这就是我编程的原因。虽然我可以使用Adob​​eAIR完成很多工作,但我目前的理解是学习C++可能是一个不错的选择。如果以后需要的话,我会学习很多有值(value)的低级编程,而且我会更轻松地学习其他面向C的语言。我看到很多信息供那些了解C++而想学习AS3的人使用,但反之则不然。为什么选择C++?跨平台兼容性对我来说很重要,所以在这个交界处我对C#或Objective-C不是特别感兴趣。我也知道Haxe,虽然我喜欢这个概念,但在做了一些研究后,我担心在学习资源和文档有限的情况下将大量时间投入到如此新的东西上。我正在寻找与此主题相关的建议和资

c++ - "Socket operation on non-socket"错误由于奇怪的语法

我在调用connect时在我的一些网络代码中遇到错误Socketoperationonnon-socket并花了很多时间试图找出导致的原因它。我终于发现是以下代码行导致了问题:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol)看到问题了吗?该行应该如下所示:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol))我不明白的是为什么第一行不正确的行没有产生警告。换句话说,一般形式不应该:if(foo=bar()编译器看起来很奇怪,尤其是使

c++ - 语法糖 : automatically creating simple function objects

我要实现一组类模板和两个特殊变量,_1和_2.他们应该使以下内容成为合法代码://Sortascendingstd::sort(a,a+5,_1>_2);//Outputtoastreamstd::for_each(a,a+5,std::cout(std::cout,""),_1+5);我想_1*5也应该产生一个一元函数,以及_1/5等。不允许提升不允许使用lambda现在我有非常对模板和模板元编程的经验很少,所以我什至不知道从哪里开始以及我的类模板的结构应该是什么样子。我特别困惑,因为我不知道在我的类模板中是否必须为所有这些编写实现operator=,operator>>,opera

c++ - std::call_once 和内存重新排序

给定来自here的代码:classlazy_init{mutablestd::once_flagflag;mutablestd::unique_ptrdata;voiddo_init()const{data.reset(newexpensive_data);}public:expensive_dataconst&get_data()const{std::call_once(flag,&lazy_init::do_init,this);return*data;}};我在其他地方也看到了相同模式的一些变体。所以我的问题是:为什么这段代码被认为是保存的?以及为什么编译器不能在调用std::c

c++ - 警告 C4180 : qualifier applied to function type has no meaning; ignored

我已经设置了编译器/Za选项来禁用语言扩展,以便编译器严格使用标准ISOC++。这是我收到以下警告的示例接口(interface)类warningC4180:qualifierappliedtofunctiontypehasnomeaning;ignored这是关于函数返回类型中的const限定符,如果我删除const,警告就会消失,但我不想这样做,我想重新启用lanqage扩展。我的问题是:这个警告合理吗?如果不是,那么我将使用pragma禁用警告,但在此之前我想确保此警告是“误报”因为下面的类是正确的ANSIISOC++不是吗?所以警告应该被禁用?classIBet{public:

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl

c++ - 错误 C2995 : function template has already been defined

此代码产生17错误C2995:函数模板已被定义;在添加#include"set.h"header之前存在一组单独的错误。有一个与此关联的私有(private).cpp和.h文件。/**File:private/set.cpp*LastmodifiedonThuJun1109:34:082009byeroberts*-----------------------------------------------------*Thisfilecontainstheimplementationoftheset.hinterface.*BecauseofthewayC++compilestemp

c++ - std::runtime_error 子类的 "call to deleted constructor of"编译器错误

我从std::runtime_error派生了一个异常类,以便添加对异常流的支持。我收到一个奇怪的编译器错误输出,我不确定如何解决?clang++-std=c++11-stdlib=libc++-g-Wall-I../-I/usr/local/includeMain.cpp-cMain.cpp:43:19:error:calltodeletedconstructorof'EarthException'throwEarthException(__FILE__,__LINE__)^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~../EarthExce

c++ - Boost bind 和 boost function,将带有参数的函数存储在一个 vector 中,然后执行它们

抱歉标题措辞不当。我一直在查看文档,但找不到任何可以解决我所遇到的问题的方法。基本上我想存储几个function1,在vector中提供参数,然后在稍后阶段执行它们。这就是我想要完成的:typedefboost::function1Task;VectormScheduledTasks;intMyArg=5;voidSomeTask(void*arg){//....}voidAddSomeTasks(){//nevermindthatMyArgisgloballyaccessiblefor(inti=0;i现在执行task()它要我传递一个参数,但我在AddSomeTasks中传递了它?