草庐IT

c++ - 当我将大于 INT_MAX 的数字分配给 int 时会发生什么?

假设我将一个11位数字赋给一个int,会发生什么?我稍微玩了一下,我知道它在int范围内给了我一些其他数字。这个新号码是如何创建的? 最佳答案 这是实现定义的行为。这意味着您的编译器必须提供说明在这种情况下发生的情况的文档。因此,请查阅该文档以获得答案。实现定义它的一种常见方法是将输入整数截断为int的位数(如有必要,在将无符号重新解释为有符号之后)。C++14标准引用:[expr.ass]/3,[conv.integral]/3 关于c++-当我将大于INT_MAX的数字分配给int时

c++ - 如果我将类声明为 const...而不是 constexpr,程序将无法运行?

这是我的程序:#includeclassDebug{public:constexprDebug(boolh):hw(h){}constexprboolany(){returnhw;}private:boolhw;};intmain(){constDebugx(true);constexprboolf=x.any();}这会引发错误“‘x’的值在常量表达式中不可用”。如果我更换constDebugx(true);与constexprDebugx(true);然后一切正常。我的印象是将constexpr放在对象定义之前与“隐式使该变量成为常量,同时验证它是常量表达式变量”同义。这对我来说表

c++ - "#define bool bool"当我悬停 bool 时说 QtCreator - 我将其跟踪到 boost::asio

我注意到bool在QtCreator中以不同于其他类型的颜色突出显示:只有在包含某些header时才会发生这种情况,最终我将其追踪到.QtCreator的代码检查器似乎无法手动跟踪定义。我使用的boost版本是Boost1.59。这样做有什么目的吗?我真的不介意,但是为同一事物定义任何东西是相当奇怪的,而不是bool. 最佳答案 好吧,我搜索了Boost1.59代码,看看是否可以找到:#defineboolbool或#include但我最终没有找到它们,所以它可能在这些文件中,但很可能在其他地方。Isthereanypurposef

c++ - 我将如何与 Lua 共享 C++ 类中的变量?

我是Lua的新手,我一直在尝试在我正在组装的游戏引擎中为逻辑实现Lua脚本。到目前为止,我在通过引擎启动和运行Lua时没有遇到任何问题,而且我能够从C调用Lua函数,并从Lua调用C函数。引擎现在的工作方式是,每个对象类都包含一组变量,引擎可以快速迭代这些变量以绘制或处理物理。虽然游戏对象都需要访问和操作这些变量以使游戏引擎本身看到任何变化,但它们可以自由创建自己的变量,Lua在这方面非常灵活,所以我没有预见到任何问题。无论如何,目前游戏引擎方面的事情都在C领域,出于性能原因,我真的希望他们留在那里。所以在一个理想的世界中,当产生一个新的游戏对象时,我需要能够让Lua读/写访问这个标准

c++ - 我将如何执行此文本模式匹配

迁移自[Spirit-general]列表早上好我正在尝试跨4个std::strings解析一个相对简单的模式,将与模式匹配的任何部分提取到一个单独的std::string.在抽象意义上,这就是我想要的:s1=,s2=,s3=,s4=不太抽象:s1="apple1",s2="2cheese",s3="apple3",s4="4cheese"实际内容:s1="lxckvjlxcjvlkjlkjexvcjxzlvcjwqrejlxvcjzljvl;xczvouzxvcuj;ljfdsapple1xcvljxclvjxoueroixcvzlkjv;zjx",s2="xzljlkxvcjlkj

c++ - 我将如何为图像格式编写 Photoshop 插件?

我有一种图像格式,但Photoshop不支持它。我的任务是编写一个插件来导入或打开格式,但是那里的信息似乎很少,我能找到的信息都是关于编写过滤器的。但是,我想导入/导出/打开,而不是过滤它。 最佳答案 我使用photoshop导入滤镜的经验大约有6年了,所以对这个评论持保留意见。我只是将官方SDK中的导入过滤器示例代码作为样板,并添加了自己的解码功能。这是一项简单的工作,从开始到完成花了一周的时间。如果我没记错的话,最糟糕的事情是:正确设置编译器并编译示例代码(两天)了解PhotoshopGUI的工作原理。当时它不是标准的win32

c++ - 如果我将指针设置为 NULL,则两次释放同一指针不会出错

我尝试两次释放同一个指针,但都失败了,但如果我按照相同的步骤而不将其设为NULL,代码运行正常。#includestructMyClass{MyClass(){std::cout我看到问题的一个很好的答案WhathappenswhenyoudeallocateapointertwiceormoreinC++?但是如果我将它设为NULL,是什么让它运行,这两种情况不应该遵循相同的行为? 最佳答案 你只需要释放你分配的东西。您使用new[]分配了五个MyClass实例。所以这就是您需要解除分配的内容。您没有释放任何指针。指针不需要被释放

c++ - 我将如何在 C++ 中将函数作为参数传递

classStepper{public:Stepper(inten,intdir,intclk,void(*f)){}};classTurret:publicStepper{public:Turret(intx,inty,intz,void(*f)):Stepper(x,y,z,void(*f)){}};voidTurretStep(){}Turrett(2,3,4,TurretStep);好吧,这给了我一个void*不是指向对象类型的指针。我要做的就是将一个void函数作为参数传递给我的构造函数。 最佳答案 你有两个问题。首先是您

c++ - 如何转发声明我将使用 typedef 创建的类型?

例如,拿这段代码:classFoo;classSomething{Foo*thing;};typedefstd::vectorFoo;这不会编译,因为Foo当typedef时已经是一个类型被击中。但是,我认为它显示了我的用例;我有周期性依赖关系,需要一个来满足另一个,但(目前)其中一件事是typedef。我不想写类似的东西classFoo{std::vectorinside;}因为那时我需要记住inside在每个my_foo.inside.some_method().我还想避免围绕std::vector编写包装器,因为它会有很多样板文件。我如何转发声明我用typedef定义的类型?或者

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?

当我getline(cin,node->name)时出现段错误(核心转储)。我通过在我的输入函数中声明一个str字符串,然后node->name=str来修复。但是跑到cin>>node->year行,仍然遇到Segmentationfault。structclient{intcode;stringname;intyear;floatmaths,physics,chemistry;structclient*next;};structclient*input(){structclient*node=(structclient*)malloc(sizeof(structclient));c