gpt4 book ai didi

c++ - STL 容器中的 max_size 由什么决定?

转载 作者:行者123 更新时间:2023-12-04 04:29:34 26 4
gpt4 key购买 nike

我试图在 C 中重现 std::string 的行为,但是有一件事我真的不知道该怎么做。有一个max_size成员方法可以提供字符串(或 vector 等的任何其他数组)可以具有的最大大小,所以我的问题是我知道这个值可能取决于系统,那么容器如何确定这个数字?我可以在 C 中得到它吗?

最佳答案

What determines max_size in STL containers?


标准库的实现者选择它。考虑到 API 和目标系统的限制,实现者应该设计容器以支持尽可能大的尺寸。容器的实现失败,并且提供的分配器可能会施加额外的限制,理想情况下应该通过降低(因此更准确) max_size 来反射(reflect)这些限制。 .
请注意 max_size在实践中只有很少的有用值(value)。这是一个理论上的上限,实际上不一定可以达到……通常是因为内存不足,至少在 64 位系统上是这样。它用于早期检测明显错误的用户输入(然后相应地抛出异常)。

And could I get it in C?


您可以定义一个常量 extern 变量并在 C++ 翻译单元中对其进行初始化。例子:
// common_header.h
// add header guard here
#include <stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif

extern const size_t cpp_string_max_size;
extern const size_t cpp_vector_int_max_size;

#ifdef __cplusplus
}
#endif

// source.cpp
#include "common_header.h"
#include <string>
#include <cstdlib>
#include <vector>

const std::size_t cpp_string_max_size = std::string{}.max_size();
const std::size_t cpp_vector_int_max_size = std::vector<int>{}.max_size();
然后,使用 C++ 编译器编译 C++ 翻译单元并将其与 C 程序链接。

I'm searching for a way that doesn't involve any C++


根据“任何 C++”的含义,您可以使用元编程:编写一个 C++ 程序,该程序生成一个 C 源文件,其中包含由 C++ 程序生成的常量。生成部分显然涉及 C++,但生成的源代码将是纯 C 语言,并且只能使用 C 编译器进行编译。
如果这不符合您的喜好,您可以阅读您选择的 C++ 标准库的实现文件,看看它们是如何实现的 max_size ,并手动编写 C 源代码。这并不涉及在任何时候编写或编译任何 C++,尽管它确实涉及阅读 C++。

关于c++ - STL 容器中的 max_size 由什么决定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67195864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com