草庐IT

int_void

全部标签

c++ - 使用 void_t 进行成员检测

对于C++14中的成员检测,我使用了基于示例here的代码,但它似乎不起作用。一个完整的例子:#includetemplateusingvoid_t=void;templateclassHasMember_substr:publicstd::false_type{};templateclassHasMember_substr>:publicstd::true_type{};templateclassHasMember_fff:publicstd::false_type{};templateclassHasMember_fff>:publicstd::true_type{};static

c++ - 为什么 Vulkan 的 VkBool32 实现为 unsigned int?

查看SaschaWillem在GitHub上托管的C++Vulkan演示,我注意到一些函数返回了数据类型VkBool32。当我注意到这条线时,我很好奇为什么Khronos没有使用普通的booltypedefuint32_tVkBool32;在vulkan.h中。uint32_t定义为typedefunsignedintuint32_t;在stdint.h中。我的问题是,如果标准Bool只需一个字节就可以完成工作,为什么丢弃3个字节有意义?我的小Recherche表明几乎没有性能差异(请参阅Whichisfaster:if(bool)orif(int)?),并且Khronos自己说他们希

C++ 对带有 unsigned int 的重载函数的模糊调用

这似乎不一致。我有3个函数f为签名类型short、int和longlong重载。如果您传递一个unsignedshort,那么它会被提升为下一个最大的有符号类型int。但是,如果您传递unsignedint,那么它不会被提升为有符号的longlong,这是我所期望的,编译器会提示对重载函数的调用不明确。voidf(shortx){std::printf("f(short)\n");}voidf(intx){std::printf("f(int)\n");}voidf(longlongx){std::printf("f(longlong)\n");}intmain(){f((unsign

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 std::is_const<const int&>::value 评估为 false?

这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果

C++ - 按位不是 uchar 产生 int

我对C++对unsignedchar按位应用not时的行为感到惊讶。取二进制值01010101b,即0x55,或85。不在八位表示上按位应用应该产生10101010b,即0xAA或170。但是,我无法在C++中重现上述内容。以下简单断言失败。assert(static_cast(0xAAu)==~static_cast(0x55u));我使用以下代码打印了0x55、0xAA和~0x55的值(作为uchar)。它揭示了按位非不做我期望它做的事情。std::cout0x55:"(~static_cast(0x55u))0x55:85,0xAA:170,~0x55:4294967210为~0

c++ - 什么 (*(void(*)()) shellcode)();方法?

抱歉,如果这听起来微不足道,但有人可以向我解释这是什么吗?(*(void(*)())shellcode)();我认为第二个*将void设置为指针,但是第一个*呢?类型转换?()是为了调用一些函数?源码在这里:/*#Title:Linux/x86chmod('/etc/passwd',0777)-shellcode42bytes#Platform:linux/x86_64#Author:MohammadRezaEspargham#Linkedin:https://ir.linkedin.com/in/rezasp#E-Mail:me[at]reza[dot]es,reza.espargh

c++ - 我可以将函数指针 void* 转换为 std::function 吗?

函数指针void*由dlsym()加载,我可以将它转换为std::function吗?假设lib中的函数声明是intfunc(int);usingFuncType=std::function;FuncTypef=dlsym(libHandle,"func");//canthiswork?FuncTypef=reinterpret_cast(dlsym(libHandle,"func"));//howaboutthis? 最佳答案 不是,函数类型int(int)和类类型std::function是两种不同的类型。每当你使用dlsym,

c++ - 为什么 sqrt() 在没有为 int 定义的 int 变量上工作正常?

第3章Programming:PrinciplesandPracticeusingC++(第六次打印),Stroustrup指出(第68页):“请注意,sqrt()不是为int定义的”.下面是一个基于该章的简单C++程序:#include"std_lib_facilities.h"intmain(){intn=3;cout鉴于上面的引用,我预计编译或运行该程序的过程会以某种方式失败。令我惊讶的是,编译它(使用g++(GCC)4.2.1)并成功运行,没有错误或警告,并产生了以下完美的输出:Squarerootofn==1.73205因此我的问题是:如果sqrt()确实没有为int定义,那

c++ - 如何创建一个具有 32 位 int 和四个 8 位 char 类型的 union ,每个 char 类型都引用 32 位 int 的不同切片?

我想创建一个最大成员是32位整数的union。主要写到这里。然后是四个8位变量,可能是char类型,每个变量将引用32位整数的不同部分,例如:union{int32myint;charchar1[7:0];charchar2[15:8];charchar3[23:16];charchar4[31:24];}但我不确定如何在C++中执行此操作。 最佳答案 这可能有效:union{int32myint;charchars[4];}; 关于c++-如何创建一个具有32位int和四个8位char