草庐IT

c++ - cstdint 之外的数字类型

我一直在我的代码中定期使用cstdint的类型(例如uint32_t),但现在它们不太符合我的需求,尤其是在模板方面。有没有办法指定一个两倍于模板参数大小的整数类型?当我的模板传递一个uint32_t时,我需要它为函数内的一个变量创建一个uint64_t。也许更困难的是,当传递一个uint64_t时,我需要它来创建一个“uint128_t”。我可以用两个模板参数的数组来做到这一点,但是我不能将该数组传递给其他模板函数。这是代码的性能关键部分(我正在做密码学)。与此相关,我是否可以包含一些其他header(按优先顺序:标准、提升、其他)给我128位整数?看起来这个问题回答了这个特定部分:

c++ - 在类定义之外定义静态类函数

考虑以下简单的类定义-//fileA.h#includeclassA{public:staticintf();staticconstintaa;};//fileA.cpp#include"a.h"usingnamespacestd;constintA::aa=10;intA::f(){returnA::aa;}这是我的主文件-//main.cppfile#include"a.h"#include"b.h"usingnamespacestd;constintA::aa=100;intA::f();intmain(){cout当我尝试编译main.cpp时,编译器提示说类外main.cpp

c++ - 我可以从除子类之外的另一个类调用抽象基类的公共(public)赋值运算符吗?

我遇到了MISRAC++2008指南,该指南中的规则12-8-2说:Thecopyassignmentoperatorshallbedeclaredprotectedorprivateinanabstractclass.然后我想,当我公开一个抽象类的赋值运算符时,是否可以从除其子类之外的其他类调用它?我觉得不可能。如果这是真的,他们为什么要定义这条规则?基本上,从类设计的角度来看,我不使用具有私有(private)成员的抽象类,也不在基类中定义赋值运算符。因此,通常不需要应用此规则。但是,如果有一个抽象基类的公共(public)赋值运算符,我会将其设置为protected(或尽可能私有

c++ - 删除 void 指针除了调用全局删除运算符之外还能做些什么?

C++标准非常清楚明确地声明在void指针上使用delete或delete[]是未定义的行为,如引用在thisanswer:Thisimpliesthatanobjectcannotbedeletedusingapointeroftypevoid*becausetherearenoobjectsoftypevoid.但是,据我所知,delete和delete[]只做两件事:调用适当的析构函数调用适当的operatordelete函数,通常是全局函数有一个单参数operatordelete(以及operatordelete[])和thatsingleargumentisvoid*ptr.

c++ - 是否有 "safe"方法来声明 lippincott 函数,以便它不会在 catch 之外被调用?

ALippincottfunction是一个将异常转换为返回码的函数,可以在来自另一种不支持异常的语言(例如C)的回调中安全地处理该返回码。这样的函数,因为它们故意使用throw没有参数,因此重新抛出最近捕获的异常,不能在catch的上下文之外调用block。我想知道现代C++(c++17或c++20)是否有任何声明机制来专门识别此类函数,并确保只从catch的上下文中调用函数block(或来自另一个此类函数的上下文),如果从任何其他上下文调用它,则会生成编译时错误。 最佳答案 没有办法告诉编译器只应从catch处理程序调用特定函数

c++ - 在 C++ 中,我可以在其范围之外定义一个指向私有(private)类成员的指针吗?

考虑:classC{private:classT{inta,b;};};C::T*p;正如预期的那样,这会产生一个编译错误,指出C::T在第6行的上下文中是私有(private)的。现在将其更改为指向成员的指针:classC{private:classT{inta,b;};};intC::T::*p;这一次,gcc3.2.3版仍然发出同样的提示,但gcc3.4.3版让它通过了。根据标准,哪种行为是正确的? 最佳答案 由于T除了类C本身之外的任何地方都是不可见的,我无法想象它会被允许。在Comau上试过这个,他告诉我同样的事情。可悲的

c++ - 如何在 C++ 中定义其父类之外的嵌套类

我有两个类,A和B。B类除了对A类没有任何意义,并且需要私有(private)访问A的成员,所以我觉得它应该是一个私有(private)嵌套类。A类已经很复杂,所以我想将B类的定义保留在A类之外,也许在单独的标题中。我试过了...classA;classA::B{inti;};classA{classB;Bmy_b;inti;};intmain(void){Amy_a;return0;}并得到错误:限定名称没有在“{”标记之前命名类。我试试这个...classA{classB;Bmy_b;inti;};classA::B{inti;};intmain(void){Amy_a;retur

c++ - 如何在 boost::spirit::qi 中将某些语义 Action 排除在 AST 之外

我尝试使用boost::spirit::qi解析大量文件。解析不是问题,但有些文件包含我想跳过的噪音。构建一个简单的解析器(不使用boost::spirit::qi)验证我可以通过跳过行首不匹配规则的任何内容来避免噪音。因此,我正在寻找一种方法来编写基于行的解析器,在不匹配任何规则时跳过行。下面的示例允许语法在完全不匹配的情况下跳过行,但是“垃圾”规则仍然插入一个空的V()实例,这是不需要的行为。在示例中使用\r而不是\n是有意的,因为我在文件中同时遇到了\n、\r和\r\n。#include#include#include#include#include#include#includ

c++ - 类定义之外的部分模板特化

我可以在类声明中使用部分模板特化templatestructA{voidfoo(){coutstructA{voidfoo(){cout但是当我试图在类声明之外做这件事时templatestructA{voidfoo();};templatevoidA::foo(){coutvoidA::foo(){cout我收到以下错误:invaliduseofincompletetype«structA»当您想要重新定义所有成员时,使用第一种方法没有问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?那么,是否可以在类定义之外使用部分模板特化? 最佳答

c++ - zbar::Image::Image() 接受除 "Y800"之外的哪些图像格式?

zbar::Image::Image()的文档没有说明可接受的图像格式:zbar::Image::Image(unsignedwidth=0,unsignedheight=0,conststd::string&format="",constvoid*data=NULL,unsignedlonglength=0)[inline]constructor.createanewImagewiththespecifiedparameters因为format是一个字符串,而不是一个枚举,所以我不知道可能的值。我知道的唯一值是来自scan_image.cpp的Y800zbar自带的示例:Imagei