草庐IT

c++ - 'Natural Size' 在 C++ 中的真正含义是什么?

我知道“自然大小”是指特定硬件处理效率最高的整数宽度。在数组或算术运算中使用short时,必须先将short整数转换为int。问:究竟什么决定了这个“自然大小”?我不是在寻找简单的答案,例如Ifithasa32-bitarchitecture,it'snaturalsizeis32-bit我想了解为什么这是最有效的,以及为什么一个短必须在对其进行算术运算之前进行转换。奖励问题:对long整数进行算术运算时会发生什么情况? 最佳答案 一般来说,每个计算机体系结构的设计都使得特定类型大小提供最有效的数字运算。具体大小则取决于体系结构,编

c# - 什么等于 c# 中的 c++ size_t

我在C++中有一个结构:structsome_struct{uchar*data;size_tsize;}我想在manged(c#)和native(c++)之间传递它。C#中的size_t是什么?附言我需要大小完全匹配,因为任何字节差异都会在包装时导致巨大的问题编辑:原生代码和托管代码都在我的完全控制之下(我可以随意编辑) 最佳答案 没有与size_t等效的C#。C#sizeof()operator无论平台如何,总是返回一个int值,因此从技术上讲,size_t的C#等价物是int,但这对您没有帮助。(注意Marshal.SizeO

c++ - 模板元编程 : multiplying a bunch of template arguments

我需要在编译时计算传递给模板化结构的一堆数字的乘积。我成功地做了一个丑陋的解决方案:templatestructmul_all{staticconstexprstd::size_tvalue=n1*mul_all;};templatestructmul_all{staticconstexprstd::size_tvalue=1;};问题是每次我必须像这样将0提供给模板参数到我的结构中intmain(){std::cout::value::value;return0;}是否有任何解决方法来读取最后一个零?注意:我是TMP的初学者。 最佳答案

c++ - 如何有效地比较 C++ 中的集合?

我想使用equal算法比较两个集合,但它给我一个错误。如何知道两个集合是否相等?if(equal(a.begin(),a.end(),v.begin(),v.end()) 最佳答案 你可以简单地说a==v,或者a.size()==v.size()&&a==v。它尽可能高效。(后一种带有显式大小检查的形式可能更好,因为集合迭代器不是随机访问的。)更新:大小检查是隐含的[感谢@juanchopanza!] 关于c++-如何有效地比较C++中的集合?,我们在StackOverflow上找到一个

C++ 表达式必须有常量值

#include#include#includeusingnamespacestd;templatevoidsort(intn,Ta[]){for(i=0;ia[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}}voidmain(){intsize;cout>size;intAmta[size];for(inti=0;i>Amta[i];}Sleep(100000);}我正在尝试从用户那里获取用户想要输入的数字数量并将其存储在可变大小中。但是当我初始化arrayAmta[size]时,我得到以下编译错误:Expressionmusthaveconstantva

c++ - i + 1 < vec.size() 和 i < vec.size() - 1 之间的区别

在编程时我发现我的代码在使用条件i时出现运行时错误但对i+1工作正常.这里vec是一个空的std::vector.//givingerrorvectorvec;for(inti=0;ivec;for(inti=0;i+1 最佳答案 std::vector::size方法返回一个未签名的std::size_t。因此,如果它为空,您将得到0-1,但表示为无符号数,根据two'scomplement,它将下溢并变为18446744073709551615. 关于c++-i+1 h

c++ - std::array::max_size 和 std::array::size 给出不同结果的示例

每当我尝试使用std::array的max_size()和size()函数时,我都会得到相同的结果,我想知道是否会出现其中两个给出不同结果的情况。 最佳答案 该函数的存在是为了与std::vector等其他容器兼容。对于std::array,这两个值将始终相同。 关于c++-std::array::max_size和std::array::size给出不同结果的示例,我们在StackOverflow上找到一个类似的问题: https://stackoverfl

c++ - C++中数组的每n个元素

是否有比下面的简单for循环更有效的方法来获取数组的每一秒(通常是每N个)元素?例如使用通用算法?#includeusingnamespacestd;intmain(){constinta_size=6,b_size=3;inta[a_size]={1,3,6,3,2,7};intb[b_size];intbx=0;for(intax=0;ax 最佳答案 for(intax=0;ax如果a_size接近INT_MAX,请小心。 关于c++-C++中数组的每n个元素,我们在StackOve

c++ - 数组初始化在 C++ 中使用 const 变量

这可以工作:constintsize=2;intarray[size]={0};编译错误:inta=2;constintsize=a;intarray[size]={0};为什么? 最佳答案 因为C++委员会的人是这么决定的。技术原因是用于初始化size的第一个表达式是常量表达式,可以在编译期间计算。这意味着编译器还可以知道数组的大小,并且可以在编译时完成分配(在这种情况下,“保留”可能是一个更合适的术语)。在第二种情况下,表达式不是常量表达式(给定C++定义)并且这种还原是不可能的。在第二种情况下,值确实在size初始化时固定,这

C++:是否有任何理由使用 uint64_t 而不是 size_t

我对size_t的理解是它足够大以容纳您可能期望它需要容纳的任何(整数)值。(也许这是一个糟糕的解释?)例如,如果您使用for循环之类的东西来遍历vector中的所有元素,size_t通常为64位长(或至少在我的系统上),以便它可以保存vector.size()的所有可能返回值。或者至少,我认为这是正确的?因此,是否有任何理由使用A而不是B:答:for(uint64_ti=0;i乙:for(size_ti=0;i如果我的解释有误或者您有更好的解释,请随时修改。编辑:我应该补充一点,我的理解是size_t表现得像一个普通的无符号整数-也许这是不正确的? 最佳答