草庐IT

C++标准

全部标签

c++ - 是否有将 SHA1 散列表示为 C 字符串的标准方法,我如何转换成它?

Thisquestion是关于如何使用OpenSSL从C中的数据数组创建SHA-1HashMap书馆。它返回一个包含哈希值的20字节数组。是否有某种标准方法以字符串形式而非二进制形式表示该数据?如果是这样,OpenSSL本身是否有转换为所述字符串格式的函数?如果不行,应该怎么做?当然,我可以想出自己的编码方式,使用base64或不使用什么,但是有一些规范的格式吗? 最佳答案 通常哈希值表示为十六进制数字序列(自然地,每个字节两个)。您可以使用带有正确修饰符的ostringstream轻松编写代码来编写此类内容:#include#in

c++ - 不明确的 if 和 else 分支 : Is the behaviour defined?

我最近遇到了一些像下面这样的C++代码:if(test_1)if(test_2){//Dostuff}elseexit(0);这是不明确的,因为编译器可以将其视为:if(test_1){if(test_2){}else{}}或作为:if(test_1){if(test_2){}}else{}这段代码的行为是根据任何标准(C、C++)定义的吗?我在VC++上的一个C++程序中看到这段代码,它似乎更喜欢第一种解决方案。 最佳答案 Isthebehaviourofthiscodedefinedaccordingtoanystandard(

c++ - 一元运算符 "-"对 C/C++(以及不同的编译器)中的无符号数据类型有何作用?

例如:unsignedintnumA=66;//oranythingreallyunsignedintnumB=-numA;unsignedintnumC=numA&numB我知道按位补码运算符可用于获取二进制补码(结合+1)。我问的原因是因为我在国际象棋引擎的一些代码中偶然发现了这个。国际象棋引擎会做很多“hacky”的事情来获得绝对速度,尤其是在每秒调用数百万次的移动生成函数中。(这无济于事,它是魔术位板移动生成的一个例子——最优化的)。特别是这个国际象棋引擎代码只能在gcc编译下正常工作(我怀疑)。不同的编译器如何处理这个问题?特别是,与VSStudio2012Express中的

c++ - 引用引用在ISO C++ 2003标准中是不允许的,但为什么编译器允许呢?

根据ISOC++2003标准第8.3.2节"referencestoreferencesarenotallowed"但是我在VisualC++和Ideone中尝试了以下代码,并且两个编译器都成功地运行了这段代码。IdeoneGCCC++4.3.2intmain(){inti=2;int&ref_i=i;int&ref_ref_i=ref_i;//shouldbeanerroraccordingtoc++2003standardcout看到编译器的这种行为后,我真的很困惑;有人可以解释一下吗? 最佳答案 您没有在代码中创建引用对引用。

c++ - C++17 标准会包含 "std::byte"吗?

根据http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0298r0.pdf:std::byteisnotanintegerandnotacharacter.std::byteismoreexpressiveandtype-safethanchar.但是,此功能未包含在wikipedia的C++17功能列表中.我的问题:C++17标准会包含std::byte吗? 最佳答案 根据ChandlerCarruth在redditliveC++17thread上的说法:C++17w

c++ - 是否存在与 `std::move`相反的强制转换(或标准函数)

首先,这个问题不是Functiondualtostd::move?或Doestheinverseofstd::moveexist?的重复。我不是在问一种机制,以防止在原本会发生的情况下发生移动,而是进行复制;而是我要问的是一种机制,该机制使将要绑定(bind)到可修改的左值引用的位置中的右值被接受。实际上,这与发明了std::move的情况恰好相反(即,在要绑定(bind)到(可修改的)右值引用的位置中接受了可修改的左值)。在我感兴趣的情况下,将不会接受右值,因为上下文需要可修改的左值引用。由于某些原因,我不太了解,但我愿意接受,一个(可修改的)右值表达式将绑定(bind)到一个常量左

c++ - 标准对 std::pow、std::log 等 cmath 函数有何看法?

标准是否保证函数在所有实现中返回完全相同的结果?以32位IEEEfloat的pow(float,float)为例。如果传入相同的两个float,所有实现的结果是否相同?或者标准是否允许根据用于实现pow的算法的微小差异提供一些灵active? 最佳答案 不,C++标准不要求cmath函数的结果在所有实现中都相同。对于初学者,您可能无法获得IEEE-754/IEC60559浮点运算。也就是说,如果一个实现确实使用了IEC60559并定义了__STDC_IEC_559__,那么它必须遵守C标准的附件F(是的,您的问题是关于C++,但C+

c++ - 使用 C/C++ 原生函数设置文件属性

我知道如何使用SetFileAttributes函数在Windows上设置文件属性。但是我想知道是否有原生的C/C++函数也可以做到这一点? 最佳答案 不,没有。标准C++和标准C均未指定此类函数。这是因为不同操作系统在该领域的功能几乎没有共同之处。例如,类UNIX操作系统具有“可执行”属性,而类Windows操作系统使用文件扩展名来确定可执行性。 关于c++-使用C/C++原生函数设置文件属性,我们在StackOverflow上找到一个类似的问题: http

c++ - 在堆上分配内存的函数原型(prototype) (C/C++)

我是C++的新手,所以这可能是一个初学者问题。它考虑了做一些我怀疑相当普遍的事情的“适当”风格。​​我正在编写一个函数,该函数在履行其职责时会在堆上分配内存以供调用者使用。我很好奇这个函数的好的原型(prototype)应该是什么样子。现在我有:intf(char**buffer);要使用它,我会写:char*data;intdata_length=f(&data);//...delete[]data;但是,我将一个指针传递给一个指针这一事实提示我,我可能以错误的方式执行此操作。有没有人愿意开导我? 最佳答案 在C中,这或多或少是合

c++ - 覆盖标准函数

我想覆盖标准函数的行为,比如std::time。是否可以调用std::time并通过我的自定义函数进行路由? 最佳答案 一般来说,std命名空间是禁止使用的。向std命名空间添加新函数、重载、类或任何其他内容是**未定义的行为*。唯一异常(exception)是模板特化。您可以在std命名空间中提供函数的特化。一个经常这样做的函数是std::swap。 关于c++-覆盖标准函数,我们在StackOverflow上找到一个类似的问题: https://stack