草庐IT

c++ - 从指针c++获取数组的大小

我正在编写一个返回数组中最大整数的简单函数。我遇到的问题是查找数组中元素的数量。这是函数头:intlargest(int*list,inthighest_index)如何获取数组“list”中的整数个数。我试过以下方法:inti=sizeoflist/sizeof(int);//returnsincorrectvalueinti=list.size();//doesnotcompile任何帮助将不胜感激! 最佳答案 C++以C为基础,并继承了它的许多特性。关于这个问题,它继承了一个叫做“数组/指针等价”的东西,这是一个允许数组衰减为

c++ - 我可以依赖 sizeof(uint32_t) == 4 吗?

我知道我可以依赖sizeof(char)==1,但是sizeof(uint32_t)和sizeof(uint8_t)呢??从名字猜大小不应该是32bit(8bit)吗?谢谢! 最佳答案 固定大小的类型总是恰好是那个大小。如果你在一些没有那种大小的整数类型的奇怪平台上,那么它们将是未定义的。请注意,如果CHAR_BIT!=8,则不一定遵循sizeof(uint32_t)==4;同样,这只发生在奇怪的平台上。 关于c++-我可以依赖sizeof(uint32_t)==4吗?,我们在Stack

c++ - 我注意到整数和长整数的大小相同。为什么?

刚在OSX上注意到这个,我发现它很好奇,因为我预计long会比int大。有什么好的理由让它们大小相同吗? 最佳答案 这是C和C++语言规范中大小定义松散的结果。我相信C有特定的最小尺寸,但C++中的唯一规则是:1==sizeof(char)此外,sizeof(int)和sizeof(long)在所有平台上的大小都不相同。我使用过的每个64位平台都有long适合自然字长,因此在32位架构上为32位,在64位架构上为64位。 关于c++-我注意到整数和长整数的大小相同。为什么?,我们在Sta

c++ - C 和 C++ 在 sizeof ('x' 上的差异)

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WhyareCcharacterliteralsintsinsteadofchars?为什么在使用C时sizeof('x')返回4而在C++中sizeof('x')返回1?C++通常力图成为C的超集,那么为什么这两个结果会出现分歧呢?编辑只是一些进一步的澄清。这似乎是标准委员会有意为之的举动,我认为如果没有充分的理由就不会改变“x”的大小。我对原因很感兴趣。

c++ - 这是在 C++03 中执行 "Expression SFINAE"的有效方法吗?

在C++11中,SFINAE很容易判断一个表达式是否有效。例如,想象一下检查某些内容是否可流式传输:templateautoprint_if_possible(std::ostream&os,constT&x)->decltype(osprint_if_possible如果os,将只参与过载决议是一个格式正确的表达式。liveexampleongodbolt.org我需要在C++03中做同样的事情,我发现sizeof可以提供帮助(因为我需要一个未评估的表达式上下文)。这是我想出的:templatestructsfinaer{};templatevoidprint_if_possible

c++ - 定义最小尺寸的结构

我想定义一个结构,例如type,这样sizeof(type)不低于某个值。动机:我有一个vectorstd::vector我将从中删除一些元素。另外,我已经将一些元素的索引保存到其他地方,因此我只想将其标记为未使用并在将来重用它。这导致我将下一个可用位置保存为已删除位置的列表。结果,sizeof(type)应不少于sizeof(size_t)和type也应该正确对齐。可能的解决方案:boost::variant从我的角度来看,这有两个问题。如果我useboost::get,性能将显着下降。如果我使用boost::apply_visitor,根据我的个人资料,语法会很奇怪,性能也会下降。

c++ - 32 位平台上结构中的 alignas

在32位x86linux上运行以下代码时,我得到了意想不到的结果(编译器标志:g++-std=c++14-m32)。我试过gcc和clang。#includeusingnamespacestd;structS1{uint64_ta;uint32_tb;};structS2{alignas(uint64_t)chara[8];uint32_tb;};intmain(){cout输出是:sizeof(S1)=12sizeof(S2)=16这里发生了什么?为什么S1和S2的大小不同?据我了解,64位整数值在32位x86机器上与32位对齐。这确实解释了为什么S1的大小是12个字节。但为什么这不

c++ - 查找二维字符串数组中的字符串数

给定一个字符串数组,我需要找出其中的字符串数。我关注了this但是如果我将它传递给一个函数,这将不起作用。这是我试过的代码#include#include#include#includeusingnamespacestd;intf1(char*input1[]){strings="";cout 最佳答案 sizeof(char*)给你char*的大小指针(在你的系统上是4)。sizeof(str2)给你数组的大小str2.一共有8个元素,每一个都是指针类型。因此,您系统上的总大小为8x4=32。要获取字符串的长度,请使用strlen

c++ - 将 operator new(sizeof(T) * N) 返回的内存视为数组

在C语言中,可以使用malloc(sizeof(T)*N)分配动态数组,然后使用指针算法获取此动态数组中i偏移处的元素。在C++中,可以使用operatornew()以与malloc()相同的方式进行类似操作,然后放置new(例如,可以查看item的解决方案13在HerbSutter的书“ExceptionalC++:47engineeringpuzzles,programmingproblems,andsolutions”中)。如果您没有,此问题的解决方案摘要将是:T*storage=operatornew(sizeof(T)*size);//insertelementT*p=sto

c++ - 为什么需要告诉结构它们有多大?

我注意到在c/c++中,需要告知许多Win32API结构它们有多大。即someStruct.pbFormat=sizeof(SomeStruct)为什么会这样?仅仅是出于遗留原因吗?也知道“pb”代表什么吗?编辑:哎呀,是的,我的意思是“cbFormat” 最佳答案 这是为了在扩展WindowsAPI时向后兼容。想象一下下面的声明structWinData{longflags;}BOOLGetWinData(WinData*wd);你这样调用它:WinDatawd;GetWinData(&wd);future的操作系统版本可能会将其