草庐IT

short-circuit-evaluation

全部标签

c++ - 如何编译 Hinnant 的 short_alloc 分配器

我想试试新的Hinnant'sshort_allocallocator据我所知,它取代了旧的stack_alloc分配器。但是,我无法编译vector示例。g++说:~#g++-std=c++11stack-allocator-test.cpp-ostack-allocator-testInfileincludedfromstack-allocator-test.cpp:6:0:short_alloc.h:11:13:error:‘alignment’isnotatypeshort_alloc.h:11:22:error:ISOC++forbidsdeclarationof‘align

c++ - 为什么在将 short[] 转换为 char* 时数组会反转?

对于下面的代码:shortshortArray[]={('B'输出是:ABCDEFG有人可以向我解释一下这是如何工作的吗? 最佳答案 表达式('B'结果类型为int,将等于'B'*256+'A'.当转换为short时(假设short表示为两个8位字节)此值由字节对AB表示,其中A是最低有效字节。在小端机器上,最低有效字节最先出现在内存中(即'A'在最左边,下一个字节是'B')。在大端机器上,'B'将在最左边。您描述的输出表明您的主机架构是小端架构。英特尔处理器都是小端。从历史上看,包括Motorola68000系列处理器、Power

c++ - static_cast wchar_t* 到 int* 或 short* - 为什么它是非法的?

在MicrosoftVC2005和g++编译器中,以下会导致错误:在win32VC2005上:sizeof(wchar_t)为2wchar_t*foo=0;static_cast(foo);结果errorC2440:'static_cast':cannotconvertfrom'wchar_t*'to'unsignedshort*'...在MacOSX或Linuxg++上:sizeof(wchar_t)为4wchar_t*foo=0;static_cast(foo);结果error:invalidstatic_castfromtype'wchar_t*'totype'unsignedi

c++ - 为什么两次比较 char 变量比一次比较 short 变量更快

我认为一次比较一定比两次比较快。但是经过我的测试,我发现在debug模式下shortcompare要快一点,而在release模式下charcompare要快一些。我想知道真正的原因。以下是测试代码和测试结果。我写了两个简单的函数,func1()使用两个字符比较,func2()使用一个短比较。主函数返回临时返回值以避免编译优化忽略我的测试代码。我的编译器是GCC4.7.2,CPUIntel®Xeon®CPUE5-24300@2.20GHz(VM)。inlineintfunc1(unsignedcharword[2]){if(word[0]==0xff&&word[1]==0xff)re

c++ - 有没有办法绕过 "This expression has side effects and will not be evaluated."?

在VisualStudio2017中,我创建了一个调用C++函数的.natvis调试器可视化规则。在调试器中显示:这个表达式有副作用,不会被计算。除此之外,它还显示了一个蓝色的小箭头,可以单击该箭头以强制其求值,然后它实际上会调用该函数。(我认为这可能是最近的一个功能,因为我似乎记得在VS2013中尝试过这个并且不记得它有绕过)我的问题是:有没有什么方法可以永久绕过这个安全检查,让它总是立即评估我的功能,而不需要我点击箭头?我看过一个非常相似的问题:"Thisexpressioncausessideeffectsandwillnotbeevaluated".Howtosuppress?

c++ - 我如何在 C++ 中将 bitset 转换为 short?

如果我有一个bitsetbits(*iter)和我的短裤我如何将这个bist分配给我的短片?shortmyShort=??bits??可以将bitset转换为short吗? 最佳答案 您确实应该使用无符号短整型,以避免在高位出现语言怪癖。unsignedshortmyShort=(unsignedshort)bits.to_ulong(); 关于c++-我如何在C++中将bitset转换为short?,我们在StackOverflow上找到一个类似的问题: h

c++ - STL 模板容器的 GDB 中的 "Cannot evaluate function -- may be in-lined"错误

我希望能够使用GDB从STL容器中获取地址并打印一对。例如,给定以下玩具程序:#includeintmain(){std::mapamap;amap.insert(std::make_pair(1,2));}我编译为:g++-ggdb3-O0-std=c++11-Wall-Wextra-pedantic-omain.outmain.cpp然后,当我尝试检查map的单个元素时,例如:pamap.begin()我得到:"Cannotevaluatefunction--maybein-lined"为什么会发生这种情况,我该如何解决?在Ubuntu20.04、GCC9.3.0、2.34中测试。

c++ - 如何将来自 std::vector<short> 的数据存储在 std::vector<uint8_t> 中

我想做的是将数据存储在std::vector中在std::vector,将每个short分成两个uint8_t值。我需要这样做,因为我有一个只会发送std::vector的网络应用程序的,所以我需要转换为uint8_t以发送,然后在收到uint8_tvector时转换回来。通常我会做的(以及我在查找问题时看到的)是:std::vectornewVec(oldvec.begin(),oldvec.end());但是,如果我理解正确,这将采用每个单独的短值,截断为uint8_t的大小,并在我想要的相同时创建一个包含一半数据量和相同条目数的新vector条目数量翻倍的数据量。包含逆向过程的方

c++ - 使用和何时使用 int16_t、int32_t、int64_t 和分别为 short int、int、long int、long

使用和何时使用int16_t、int32_t、int64_t以及分别使用short、int,长。C++中有太多该死的类型。对于整数,什么时候使用一个而不是另一个是正确的? 最佳答案 当精度很重要时,使用明确定义的类型。当它不是时,使用不太确定的。使用更精确的永远不会错。当您使用灵活的时,有时会导致错误。 关于c++-使用和何时使用int16_t、int32_t、int64_t和分别为shortint、int、longint、long,我们在StackOverflow上找到一个类似的问题:

c++ - 如何从一个long long int中提取四个unsigned short int?

假设我有一个longlongint并想从它的位中提取出四个unsignedshortint。特定的顺序在这里并不重要。我通常知道我需要移位并截断到unsignedshortint的大小。但我想我可能在某个地方犯了一些奇怪的错误,所以我问。 最佳答案 #include#includeunionui64{uint64_tone;uint16_tfour[4];};intmain(){unionui64number={0x123456789abcdef0};printf("%x%x%x%x\n",number.four[0],number