草庐IT

c++ - 为什么在 Mac OS X 上使用 size_t 时 uint32_t 和 uint64_t 之间存在歧义?

考虑以下示例代码:#include#includeusingnamespacestd;intf(uint32_ti){return1;}intf(uint64_ti){return2;}intmain(){cout这在MacOSX上失败:$g++--versioni686-apple-darwin10-g++-4.2.1(GCC)4.2.1(AppleInc.build5664)$maketestg++test.cc-otesttest.cc:Infunction'intmain()':test.cc:23:error:callofoverloaded'f(size_t&)'isamb

c++ - (uint64_t)-1 是否保证产生 0xffffffffffffffff?

我知道,C标准很好地定义了(unsigned)-1必须产生2^n-1,即。e.一个无符号整数,其所有位都已设置。(uint64_t)-1ll也是如此。但是,我在C11标准中找不到指定如何解释(uint64_t)-1的内容。那么,问题是:C标准中是否有任何保证,以下哪项成立?(uint64_t)-1==(uint64_t)(unsigned)-1//0x00000000ffffffff(uint64_t)-1==(uint64_t)(int64_t)-1//0xffffffffffffffff 最佳答案 是的。请参阅C116.3.1.

c++ - 带有 __declspec(align ('16' )) 的形式参数不会对齐

我正在尝试创build置着色器制服的功能,但是当我尝试编译它时出现此错误:Error2errorC2719:'value':formalparameterwith__declspec(align('16'))won'tbealigned这里是函数代码:voidShader::setUniform(std::stringname,constglm::mat4value){GLintuniform=glGetUniformLocation(m_program,name.c_str());glUniformMatrix4fv(uniform,1,GL_FALSE,(GLfloat*)&val

c++ - unsigned long 和 UINT64 的区别

unsignedlong和UINT64有什么区别?我认为它们是相同的,但我不确定。UINT64的定义是:typedefunsigned__int64UINT64(通过使用StdAfx.h) 最佳答案 UINT64是特定的并声明了您的意图。您需要一个正好是64位宽的无符号整数类型。在某些平台上这可能等于unsignedlong是巧合。 关于c++-unsignedlong和UINT64的区别,我们在StackOverflow上找到一个类似的问题: https:/

c++ - 我应该如何在 API 中替换 vector<uint8_t>::const_iterator?

我的任务是完善编解码器库的界面。我们使用的是C++17,我只能使用标准库(即没有Boost)。目前,有一个Decoder大致如下所示的类:classDecoder:publicCodec{public:structResult{vector::const_iteratornew_buffer_begin;optionalmetadata;optionalpacket;};Resultdecode(vector::const_iteratorbuffer_begin,vector::const_iteratorbuffer_end);private://irrelevantdetails

c++ - 警告 C4316 : object allocated on the heap may not be aligned 16

重要信息:开发操作系统:Windows8.164位目标操作系统:Windows8.164位IDE:VisualStudio2013专业版语言:C++问题:通过IDE编译我的静态库项目时收到以下警告:warningC4316:...:objectallocatedontheheapmaynotbealigned16我可以简单地忽略此警告...但我假设它的存在是有原因的,并且希望至少了解它的含义以及它对future可能产生的影响。我认为这行代码与问题有关,在我的Win32窗口包装类中调用:m_direct3D=newDirect3D(this);m_direct3D是一个指向我的Direc

c++ - Visual C++ 10.0 SP1 中的编译器错误 - cl.exe 版本 16.0.40219.1 访问冲突 [已确认]

我在使用VisualStuido2010SP1cl.exe版本16.0.40219.1编译某些模板代码时遇到了问题以下代码会导致编译器访问违例:templateclassA{A(){}};templateclassB:publicA{usingA::A();//Compileraccessviolates//**EDIT**//usingA::A;//Compilersucceeds//usingA::A();//Compilerreportserror};intmain(intargc,char*argv[]){return0;}产生如下错误(除了“cl.exe已停止工作,C0000

C++ auto on int16_t 强制转换为整数

我是C++17的新手,正在尝试理解decltype关键字以及它如何与auto配对。以下是产生意外结果的代码片段。#include#include#includeusingnamespacestd;intmain(){int16_tmid=4;autolow=mid-static_cast(2);autohi=mid+static_cast(2);int16_tval;cin>>val;val=std::clamp(val,low,hi);return0;}令人惊讶的是,编译器告诉我clamp不匹配,并且low和high是int.如果我将auto更改为int16_t一切都很好,并且所有类

c++ - uint8、uint16等的使用

目前我正在使用针对32位MIPS平台的代码库(C、C++混合)。该处理器是一个相当现代的处理器[只是提到我们拥有大量的处理能力和内存]。代码库使用uint8[1字节宽无符号整数]、uint16[2字节宽无符号整数]、uint32[4字节宽无符号整数]等数据类型。我知道在将代码移植到不同平台时如何使用这些结构。我的问题是:在uint32也足够的情况下使用uint16有什么用途/好处(如果有的话)?使用较短的数据类型(考虑数据对齐)会节省内存吗?如果是为了节省几个字节的内存,在现代硬件中这样做是否明智? 最佳答案 Whatistheus

c++ - 在 I/O 中使用 char16_t 和 char32_t

C++11引入char16_t和char32_t便于使用UTF-16和UTF-32编码的文本字符串。但是库仍然只支持实现定义的wchar_t用于多字节I/O。为什么支持char16_t和char32_t未添加到库以补充wchar_t支持吗? 最佳答案 在提案中MinimalUnicodesupportforthestandardlibrary(revision2)表明只有图书馆工作组支持在字符串和编解码器方面支持新的字符类型。显然大多数人反对支持iostream、fstream、codecvt和正则表达式以外的方面。根据Portla