标签: size-t

与size_t比较,返回int?

我正在编写一些代码示例来自"如何像C++中的计算机科学家一样思考",这一个是关于处理扑克牌类型的对象和套牌.我正面临着这种情况:

int Card::find(const std::vector<Card>& deck) const {
    size_t deckSize = deck.size();
    for (size_t i=0; i<deckSize; i++)
        if (equals(*this, deck[i])) return i;

    return -1;
}
Run Code Online (Sandbox Code Playgroud)

我不能像在文本中那样在Visual Studio 2010中的C++中使用".length()",而是必须使用返回(我相信)std :: size_type的.size().我想我可以使用size_t并躲开它,以避免不同架构上的问题,正如我一直在阅读,但我想知道我是否返回i,但它比一个整数大,我会崩溃程序吗?

[编辑在我的问题中更具体:]一旦我开始使用向量比卡更大的东西,我考虑使用unsigned int因为编译器不匹配警告,但我觉得返回unsigned int或int有一些问题:1) int不会采用足够大的向量索引.2)返回unsigned int不会让我返回-1.3)unsigned int在所有架构上都不等于size_t(我也在ARM Cortex-M3上进行微控制器编程).

如果我有足够大的矢量,我该怎么办?

c++ int vector object size-t

5
推荐指数
1
解决办法
2904
查看次数

误导性编译器错误消息:size_t 不是 std 的成员?

我有以下包含模板类的头文件:

#ifndef VECTOR_H
#define VECTOR_H

namespace lgl
{
    namespace maths
    {
        template<class T, std::size_t SIZE>
        class Vector
        {
        public:
            Vector();
            Vector(T defaultValue);
            Vector(const Vector<T, SIZE>& other);
            Vector<T, SIZE>& operator=(const Vector<T, SIZE>& other);
            ~Vector();

            //accessors
            const std::size_t size() const;
            const T& operator[](std::size_t i) const;
            T& operator[](std::size_t i);

            //vector operations
            Vector<T, SIZE> operator+(const Vector<T, SIZE>& other) const;
            Vector<T, SIZE> operator-(const Vector<T, SIZE>& other) const;
            Vector<T, SIZE> operator*(const T& scalar) const ;
            Vector<T, SIZE> operator/(const T& scalar) const ;
            T operator*(const Vector<T, SIZE>& …
Run Code Online (Sandbox Code Playgroud)

c++ templates std size-t c++11

5
推荐指数
1
解决办法
6474
查看次数

在C中返回值-1作为size_t返回值的后果是什么?

我正在读一本教科书,其中一个例子就是这样做的.下面,我以缩写形式复制了这个例子:

#include <stdio.h>
#define SIZE 100

size_t linearSearch(const int array[], int searchVal, size_t size);

int main(void)
{
    int myArray[SIZE];
    int mySearchVal;
    size_t returnValue;

    // populate array with data & prompt user for the search value

    // call linear search function
    returnValue = linearSearch(myArray, mySearchVal, SIZE);

    if (returnValue != -1)
        puts("Value Found");
    else
        puts("Value Not Found");
}

size_t linearSearch(const int array[], int key, size_t size)
{
    for (size_t i = 0; i < size; i++) {
        if (key == array[i])
            return …
Run Code Online (Sandbox Code Playgroud)

c size-t

5
推荐指数
1
解决办法
168
查看次数

在通用选择中处理 size_t

是否可以定义一个支持所有标准(无符号)整数类型的泛型宏,以及size_t

foo((size_t)42)只要size_t引用标准的无符号整数类型之一,就可以使用下面的示例。但是标准是否保证在任何情况下都是这种情况,或者也size_t可以指代扩展整数类型?

void foo_bool(_Bool x);
void foo_uchar(unsigned char x);
void foo_ushort(unsigned short x);
void foo_uint(unsigned x);
void foo_ulong(unsigned long x);
void foo_ullong(unsigned long long x);

#define foo(x) _Generic((x), \
    _Bool: foo_bool, \
    unsigned char: foo_uchar, \
    unsigned short: foo_ushort, \
    unsigned: foo_uint, \
    unsigned long: foo_ulong, \
    unsigned long long: foo_ullong)(x)

Run Code Online (Sandbox Code Playgroud)

c size-t c11

5
推荐指数
1
解决办法
140
查看次数

size_t是否足够大以表示任何类型的大小?

是否size_t保证足够大以表示任何类型的大小?根据参考:

size_t 可以存储任何类型(包括数组)的理论上可能存在的对象的最大大小。

通常,这是一个可靠的参考,但我在标准的相关部分中找不到任何证明或质疑此主张的内容。

c size-t language-lawyer

5
推荐指数
1
解决办法
119
查看次数

VSCode - 标识符“size_t”未定义

我正在为一个简单的程序编写代码,当给定多边形的边数和每边的长度作为作业时,该程序计算多边形的周长,问题是,当我这样做时,它for (size_t i = 0; i < sidesnumber; i++)会给我一个错误,size_t说“标识符” “size_t”未定义”。我已经尝试过也包括图书馆,stddef.h但它保持不变。

这是整个代码:

#include <stdio.h>

int sidesnumber = 0;
int sides[100];
int results;

main()
{
    printf("Number of Sides\n");

    sidesnumber = getchar();
    sidesnumber -= 48;

    for (size_t i = 0; i < sidesnumber; i++)
    {
        /* code */
        getchar();
        sides[i] = getchar();
        sides[i] -= 48;
    }

    for (size_t i = 0; i < sidesnumber; i++)
    {
        /* code */
        results += sides[i];
    }

    printf("The perimeter is:%d", results); …
Run Code Online (Sandbox Code Playgroud)

c size-t

5
推荐指数
1
解决办法
3934
查看次数

为什么 snprintf() 采用 size_t 大小限制,但返回 int 打印的字符数?

令人尊敬的snprintf()功能...

int snprintf( char *restrict buffer, size_t bufsz, const char *restrict format, ... );
Run Code Online (Sandbox Code Playgroud)
  • 返回它打印的字符数,或者更确切地说,如果没有缓冲区大小限制,它会打印的字符数。
  • 获取缓冲区的大小(以字符/字节为单位)。

缓冲区大小为size_t,但返回类型仅为 an ,这有什么意义int

如果snprintf()应该能够将多个INT_MAX字符打印到缓冲区中,那么它肯定必须返回一个ssize_t或一个size_t(size_t) - 1指示错误,对吧?

如果它不能打印多个INT_MAX字符,为什么是bufszasize_t而不是 anunsigned或 an int?或者 - 至少官方限制其值不大于INT_MAX

c printf size-t

5
推荐指数
1
解决办法
883
查看次数

std::ranges::views::enumerate 在 GCC 上建立索引时是否使用了错误的类型?

首先,使用 Range-v3,我注意到

std::vector<int> v;
auto w = v | ranges::views::enumerate;
auto [x, y] = *w.begin();
static_assert(std::is_same_v<std::size_t, decltype(x)>);
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,因为std::size_t据我所知,这是用于索引对象的正确类型

然后,对于 C++20 范围,静态断言会失败。相反,以下传递,

static_assert(std::is_same_v<long, decltype(x)>);
Run Code Online (Sandbox Code Playgroud)

但与我的系统上long的不一样,我在其中验证了这一点std::size_t

static_assert(std::is_same_v<unsigned long, std::size_t>)
Run Code Online (Sandbox Code Playgroud)

在 GCC 13.2.1 上,这是示例

c++ size-t language-lawyer std-ranges c++23

5
推荐指数
1
解决办法
209
查看次数

将size_t转换为int以声明char数组的大小

我试图声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小.无论如何,我可以将size_t变量强制转换为int,以便我可以这样做吗?

c++ int casting size-t

4
推荐指数
1
解决办法
6981
查看次数

Objective-C运行时:为class_addIvar添加大小和对齐的内容?

Objective-C运行提供class_addIvar C函数:

BOOL class_addIvar(Class cls, const char *name, size_t size, 
                   uint8_t alignment, const char *types)
Run Code Online (Sandbox Code Playgroud)

我该怎么把为sizealignment

我正在添加一个类型的实例变量UITextPosition *,但没有UITextPosition对象在范围内.因为size,我可以做sizeof(self),哪个self是子类UITextField?即,我可以假设一个UITextPosition对象与对象的大小相同UITextField吗?

我怎么得到alignment

c objective-c sizeof size-t memory-alignment

4
推荐指数
1
解决办法
1938
查看次数