草庐IT

unsigned-char

全部标签

c++ - const char* 与 C++ 双重翻译问题

我有两个使用同一个库的示例应用程序,它们之间的主要区别在于一个使用qt而另一个应用程序是控制台应用程序。在公共(public)库中,我有这个测试代码:doubletest=0.1;doubletest2=atof("2.13134");doubletest3=atof("1,12345");如果我使用非qt应用程序,则值为:test=0.10000000000001test2=2.1323399999999999998test3=1//Thisistheexpectedresultusinga','asdelimitationcharacter但是对于qt应用程序:test=0.100

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++ - std::array<char, N> 的大小是多少?

这个问题在这里已经有了答案:Isthesizeofstd::arraydefinedbystandard(1个回答)关闭8年前。C++标准对sizeof(std::array)有何规定?应该是(对于某个常量N)?在commenttoadifferentquestion中,有人提到std::array并不总是“堆栈分配”。该评论是对另一条评论的回应,该评论推测为std::array设置了一个太大的常量。声明为局部变量的变量可能会由于“堆栈分配”变量的资源不足而导致程序中止。我假设后续评论意味着std::array是可能的以某种方式切换到动态分配模式。我可以想象,可能会有某种SFINAE可

c++ - 为什么 std::size_t 在 32 位系统上是 4 个字节,而 unsigned long long 在 32 位和 64 位系统上都是 8 个字节?

问题很简单。在32位系统上:std::cout在64位系统上:std::cout我只检查了MSVC的实现,它看起来像这样:#ifdef_WIN64typedefunsigned__int64size_t;#elsetypedefunsignedintsize_t;#endif那么为什么不在32位和64位系统上制作std::size_tunsignedlonglong(std::uintmax_t)支持吗?还是我错了? 最佳答案 size_t的要点是能够容纳最大可能对象的大小。在32位系统上,任何对象都不能占用超过2**32字节,因此

c++ - std::hash 值在 char* 值上而不是在内存地址上?

如本link所述:ThereisnospecializationforCstrings.std::hashproducesahashofthevalueofthepointer(thememoryaddress),itdoesnotexaminethecontentsofanycharacterarray.这意味着使用相同的char*值,可以产生不同的哈希码。例如,有这样的代码://MOKandMOVaretemplateargumentsvoidemit(MOKkey,MOVvalue){autoh=hash()(key);cout这是通过调用4次emit()对相同的key(使用MO

c++ - 用 unsigned long 替换 size_t 的缺点是什么

我正在开发的库需要在32位和64位机器上使用;我有很多编译器警告,因为在64位机器上unsignedint!=size_t。将所有unsignedint和size_t替换为“unsignedlong”有什么缺点吗?我很欣赏它看起来不是很优雅,但是,在这种情况下,内存不是太大的问题......我想知道是否有可能由这样的替换产生任何错误/不需要的行为等all操作(你能举个例子吗)?谢谢。 最佳答案 什么警告?我能想到的最明显的一个是“缩小转换”,也就是说你正在将size_t分配给unsignedint,并收到一条警告信息可能迷路了。用u

c++ - 类型 "char *"的参数与类型 "LPWSTR"的参数不兼容

这可能以前有人问过,但我似乎找不到解决方案:std::stringGetPath(){charbuffer[MAX_PATH];::GetSystemDirectory(buffer,MAX_PATH);strcat(buffer,"\\version.dll");returnstd::string(buffer);}这会返回一个错误说明:argumentoftype"char*"isincompatiblewithparameteroftype"LPWSTR"是的。有人得到答案了吗? 最佳答案 你需要使用ansi版本:std::s

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

c++ - 为什么将字符串文字传递给 char* 参数有时只是编译器错误?

我在C和C++程序中工作。我们曾经在没有make-strings-writable选项的情况下进行编译。但那会收到一堆警告,所以我将其关闭。然后我收到一大堆错误,格式为“无法将constchar*转换为char*inargmuent3offunctionfoo”。所以,我经历了很多改变来解决这些问题。然而,今天,程序崩溃了,因为文字“”被传递到一个需要char*的函数中,并将第0个字符设置为0。它没有做任何坏事,只是试图编辑一个不断,崩溃。我的问题是,为什么这不是编译器错误?以防万一,这是在用gcc-4.0编译的mac上。编辑:添加代码:char*host=FindArgDefault