草庐IT

MIN_CONTAINER_SIZE

全部标签

c++ - size of datatype 和 sizeof(data type) 的区别

我在学习C++时遇到了以下问题。我只是一个初学者,我很困惑。sizeof()函数不应该返回数据类型的大小吗?为什么数据对象的大小可能与其sizeof()不同?我不明白答案的解释。假设在一台假想的机器中,char的大小是32位。sizeof(char)会返回什么?一)4b)1c)依赖于实现d)机器相关答案:b说明:标准不要求char为8位,但确实要求sizeof(char)返回1。 最佳答案 sizeof运算符以bytes为单位生成类型的大小,其中字节定义为char的大小。所以根据定义,sizeof(char)始终为1,无论bitsc

c++ - 从 std::size_t* 到 long unsigned int* 的无效转换

在raspberrypi-arv7l上,我正在编译以下C++程序#includevoidfun(unsignedlongint*i){std::cout对于上面的代码,我收到以下错误:a.cpp:Infunction'intmain()':a.cpp:12:9:error:invalidconversionfrom'std::size_t*{akaunsignedint*}'to'longunsignedint*'[-fpermissive]fun(&i);^~a.cpp:3:6:note:initializingargument1of'voidfun(longunsignedint*

c++ - 是否可以微优化 "x = max(a,b); y = min(a,b);"?

我有一个开始的算法intsumLargest2(int*arr,size_tn){intlargest(max(arr[0],arr[1])),secondLargest(min(arr[0],arr[1]));//...我意识到第一个可能不是最优的,因为当您认为知道最小值所需的信息已经存在一次时,调用max然后调用min是重复的你已经找到了最大值。所以我想我可以做intlargest=max(arr[0],arr[1]);intsecondLargest=arr[0]==largest?arr[1]:arr[0];减少对min的无用调用,但我不确定这是否真的节省了多少操作。是否有任何

c++ - OpenMP 最小值缩减和 std::min

我正在测试OpenMP最小缩减。如果我像下面这样编写代码,它将返回正确的结果:res=3。#include#include#includeintmain(){omp_set_num_threads(5);floatres=10;#pragmaompparallelfordefault(shared)reduction(min:res)for(inti1=0;i13.0+i1+20*i0)res=3.0+i1+20*i0;std::cout但是如果我以另一种方式编写,将“if”语句替换为“std::min”,那么结果是错误的:res=10。#include#include#include

c++ - 对未知大小数组的引用的列表初始化 : is it supposed to deduce the array size?

以下代码在Clang中编译良好并输出int[3]数组的大小#includeintmain(){constint(&a)[]={1,2,3};std::cout但是,在GCC中,声明编译得很好,但是sizeofa没有:显然GCC拒绝“推断”数组大小并以a作为结尾对constint[]类型的引用,该类型不完整。此类初始化的预期行为是什么?9.3.4/3似乎是此类情况下标准的相关部分,但它本身似乎并不能最终回答这个问题。 最佳答案 标准在这一点上并不完全清楚,我认为GCC的解释很可能是WG21的意图,但我不确定。标准的相关部分是[dcl.

c++ - boost::multi_index_container::index<Tag>::type 有什么意义?

如果你有一个boost::multi_index_container对于多个索引,显然有多种方法可以对其进行迭代——每个索引都定义了一种方法。例如,如果您有一个标签为T的索引,您可以从container.get().begin()迭代至container.get().end().如果您尝试在for循环中这样做(并且没有C++0xauto),迭代器的类型是multi_index_container::index::type::iterator.现在index::type将是boost::multi_index::detail::ordered_index或结构上等效的东西。例如。它将提供

c++ - std::list 中的 max_size() 函数如何计算最大尺寸?

在std::list中,max_size()函数中的最大大小是如何计算的?现在我意识到这取决于实现,但假设我是制作标准库的人。我将如何确定可移植的特定类型T的list的最大限制? 最佳答案 它几乎总是N的最大值,其中容器最多可以有N个元素。这几乎总是意味着所讨论平台上无符号整数类型的最大值除以要存储在容器中的元素类型的大小。 关于c++-std::list中的max_size()函数如何计算最大尺寸?,我们在StackOverflow上找到一个类似的问题: h

c++ - 这个 min() 函数是如何工作的?

我遇到了这段代码:int__min(inta,intb){return((a)-(((a)-(b))&((b)-(a))>>31));}我可以想象它与2s补码有关,并且它仅适用于带符号的32位整数,但在那之后我迷路了。我找到了thisquestion,但我不认为这些功能是相关的,还是我错了?所以我有两个问题:为什么这个功能有效?有没有一种情况(a行不通而这个功能行得通,或者这个功能只是为了好玩而过于复杂?编辑:该函数是为GPU编写的,所以我认为@Banex可能是正确的,这样编写它的目的是为了避免分支。 最佳答案 这是为32位有符号值

c++ - Boost Container vector 可以通过非原始指针管理内存吗?

我有一个类似指针的结构来代替指针。与指针的区别在于它有额外的信息,(也是特殊的)分配器可以使用这些信息来释放内存。这种类似于指针的结构适用于所有基本用途。我可以分配和取消分配内存、取消引用、递增、->等现在我想使用这个指针由类似STL的容器管理。早些时候,我意识到STLvector基本上无法处理非原始指针。T*编码太硬,标准基本上排除了任何不是指针的东西。灵感来自Boost.Interprocess'offset_ptr我决定使用Boost.Containervector,这是非常可定制的,原则上可以管理任何东西,分配器传递给boost::container::vector可以处理任何

c++ - 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?

根据我对可用性宏和-mmacosx-version-min标志如何工作的理解,以下代码在针对OSX10.10时应该无法编译:#include#include#include#if!defined(__MAC_OS_X_VERSION_MIN_REQUIRED)#error#endif#if__MAC_OS_X_VERSION_MIN_REQUIRED101000#error__MAC_OSX_VERSION_MIN_REQUIREDtoohigh#endifintmain(){size_tlen=0;SSLContextRefx{};autostatus=SSLCopyRequeste