草庐IT

entry-default-unsigned

全部标签

c++ - 为什么 64 位 GCC 在分配数组时警告将 const int 转换为 long unsigned int?

我有一个如下所示的文件test.cpp:voidf(constintn){unsignedchar*a=newunsignedchar[n];delete[]a;}intmain(){f(4);return0;}使用-Wsign-conversion在64位GCC中编译它标志产生警告:test.cpp:2:39:warning:conversionto‘longunsignedint’from‘constint’maychangethesignoftheresult[-Wsign-conversion](第2行是调用new的行)。我觉得GCC应该发出关于分配数组的警告似乎很奇怪,但下面

c++ - 使用 C++ 写入二进制文件 : does the default locale matter?

我的代码使用设置了二进制标志的fstream和使用未格式化的I/O函数读取和写入来操作二进制文件。这在我曾经使用过的所有系统上都能正常工作(文件中的位完全符合预期),但这些基本上都是美国英语。我一直想知道这些字节是否可能被不同系统上的codecvt修改。听起来标准说使用未格式化的I/O与使用sputc/sgetc将字符放入streambuf的行为相同。这些将导致调用streambuf中的溢出或下溢函数,并且听起来这些会导致通过某些codecvt的东西(例如,请参阅c++标准中的27.8.1.4.3)。对于basic_filebuf,此codecvt的创建在27.8.1.1.5中指定。这

c++ - has_trivial_default_constructor 是如何工作的?

谁能给我解释一下has_trivial_default_constructor是如何工作的?我试图在提升实现中找到它,但不幸的是宏太多,我迷路了......如何使用模板检测C++中的trivial_default_constructor?我需要一个C++03而非11的示例。#include#includestructA{A(){}inta;//std::vectorb;};intmain(intargc,char*argv[]){structB{std::vectorb;};boolresult=boost::has_trivial_default_constructor::value

c++ - 如何将 vector<unsigned char> 写入文件,后跟一个 unsigned int

我必须对5个unsignedcharvector进行分组(data_length=5)。在组的末尾,我想添加一个ID组并将它们(组数据+它的ID)写入文件。其中组ID类型integer。我按以下代码执行该任务。这是对的吗?下图显示了我正在服用的东西#definerandom(x)(rand()%x)std::ofstreamfilewrite("abc.raw",std::ios::out|std::ofstream::binary);unsignedintiter=0;unsignedintdata_length=5;unsignedintID_data=0;//----------

c++ - 使用指针将 char* 转换为 unsigned char*

我正在编写一些使用fstreamread()函数的代码,该函数需要一个char*作为缓冲区。稍后,我想将此缓冲区中的字节作为无符号字符使用,因此我要么必须:1.将缓冲区声明为char*,然后稍后为每个元素执行static_casts,2.声明缓冲区作为unsignedchar*然后在我将它传递给读取函数时执行reinterpret_cast,或者3.将缓冲区声明为char*并创建一个转换指针,我将其用于将缓冲区作为unsignedchar进行访问。这是一个片段:char*buf=newchar[512];unsignedchar*ubuf=reinterpret_cast(buf);f

c++ - 从 double 到 unsigned int 的转换

我遇到了将值从Double转换为int的问题。我尝试运行以下代码:intmain(){doubleval_d=6.25e-05;cout从double到int的转换可能会删除小数部分,但应保留整数部分是吗?我得到的输出是:1600015999那么为什么这里的o/p不同呢?这只发生在软呢帽上。在Windows和Ubuntu上它工作正常。(两个输出都是16000)我调整了上面的代码并得到了以下结果:intmain(){doubleval_d=6.25e-05;cout新输出是160001600016000 最佳答案 当源文本“6.25e

c++ - unsigned int 的最大值

这个问题在这里已经有了答案:Testingforamaximumunsignedvalue(6个答案)关闭9年前。这是我想要的:unsignedintmax_unsigned_int_size;max_unsigned_int_size=???;我应该怎么做?

c++ - 缩小从 `int`(常量表达式)到 `unsigned int` 的转换 - MSVC vs gcc vs clang

constexprinti=100;structF{F(unsignedint){}};intmain(){F{i};}上面的代码片段:使用-Wall-Wextra-Wpedantic在g++7上编译没有警告。使用-Wall-Wextra-Wpedantic在clang++4上编译没有警告。无法在MSVC2017上编译:conversionfrom'constint'to'unsignedint'requiresanarrowingconversion问:这里MSVC是不是错了?liveexampleongodbolt.orginti=100;structF{F(unsignedint

keil 报错 *** Target ‘Target 1‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available

问题:***Target‘Target1’usesARM-Compiler‘DefaultCompilerVersion5’whichisnotavailable.这个错误是由于使用的ARM编译器“DefaultCompilerVersion5”不可用导致。原因是新版的keil不在自动下载v5版本的编译器,但是老版本使用的v5,所以需要手动安装v5的编译器。下载v5.06的编译器并添加到keil,下载链接如下:链接:https://pan.baidu.com/s/1HKY34HP4zjkDPGd1ikbX4w?pwd=gych提取码:gych具体操作方法:(参考的是dxh_wds的资料)1.进

c++ - -Wconversion warning while using operator <<= on unsigned char

当我用gcc编译以下代码时:intmain(){unsignedcharc=1;c我收到这个警告:conversionto‘unsignedchar’from‘int’mayalteritsvalue[-Wconversion]为什么?这段代码有什么问题?其实,我真的可以使用oprator吗?在unsignedchar上变量?编译命令:g++test.cpp-Wconversion-otest.exe 最佳答案 这是一个有效的警告:c相当于:c=c和的规则假设操作数被提升,在这种情况下将提升为int结果是提升的类型。所以会有一个从i