繁体   English   中英

如何检索数据类型的大小?

[英]How to retrieve size of a data type?

a为数组。 那么a.size()sizeof(a)什么区别?

.size()可以返回任何内容,具体取决于实现方式。

无论如何, .size() 通常返回容器的大小,换句话说-容器包含的元素数。

sizeof运算符是集成运算符,它返回在堆栈上分配的字节数。 例如

        char a[50];
        char* b = new char[50];
        cout << sizeof( a ) << '\n';
        cout << sizeof( b );

打印50(这是50 * sizeof( char ) = 50 * 1 = 50 ),第二行打印8-因为这是指针的大小( 我的机器是x64 ,这就是为什么如果我有32位CPU的原因是8 ,那就是4)。

cout << sizeof( *b ); 将打印1,因为*b取消了对指针的引用并返回数组的第一个元素(与sizeof( b[0] )相同,后者为sizeof( char )

换句话说,如果要查看元素的数量(如果它是一个容器)并且如果它提供了这样的方法,则最好依靠.size()


其他例子:

class A
{
        int a;
        char b[100];
};

class B
{
        int a;
        char* b;
public:
        B()
        {
                b = new char[100];
        }
        ~B()
        {
                delete[] b;
        }
};
int main()
{
        cout << sizeof( A ) << '\n';
        cout << sizeof( B ) << '\n';
        B b;
        cout << sizeof( b ) << '\n';
        return 0;
}

第一个在x64平台上将打印104,因为我们有100*sizeof(char) + sizeof(int) (=4 )注意 104 mod 8 == 0 ,您将看到原因);

第二个和第三个将打印相同。 但是请注意 ,我们在这里对齐! 在x64上,对齐方式是在8B上,因此sizeof( char * )给出8, sizeof( int )给出4并由此得出12。 但是 12 mod 8 == 4这是!= 0,因此由于对齐, sizeof( B )打印16 (16 mod 8 == 0)。

因此,当您使用sizeof ,请非常小心。
希望对您有所帮助(:


关于列表的问题,请看一下:

        list< int > lint;
        list< char > lchar;
        cout << sizeof( lint ) << '\n';
        cout << lint.size() << '\n';
        cout << sizeof( lchar ) << '\n';
        lint.push_back( 10 );
        lint.push_back( 10 );
        cout << lint.size() << '\n';
        cout << sizeof( lint ) << '\n';

所有操作符sizeof都将打印相同的内容,具体取决于std::list的实现。 但是第一个.size()将返回0,因为没有元素,而第二个.size()将返回2,因为列表中有2个元素。

sizeof(a)是由所使用的字节数a ,不包括任何动态分配的内存。 这是一个编译时间常数。 您也可以将其与类型一起使用, sizeof(int)提供sizeof(int)的字节数。

通常为容器类型定义a.size() ,并给出容器中当前的元素数(而不是字节数)。 这是一个运行时值,随着您在容器中添加或删除对象而改变。

a.size()为您提供了类特别的值。 例如字符串或列表的长度。 这取决于课程的类型和实施人员。 但通常size是有意义的,如列表中所示。

如果您是新手程序员,那么应该避免使用sizeof运算符。 它被广泛应用在C到alloc内存。 它返回对象在内存中占用的空间。 在C ++中,我们使用new来动态分配内存。 这要容易得多。 有关sizeof的更多信息: http : //en.wikipedia.org/wiki/Sizeof

不确定a.size(),但sizeof(a)返回其长度( 以字节为单位) 如果需要数组中元素的数量,请将其除以每个元素的大小。 例如:

int size = sizeof(myArray) / sizeof(*myArray);

如果a是数组-

int a[5] ; // Taking it as an array that can hold integers.

现在-

a.size(); // Error. `a` is not a class type to use `.` operator on it. 

sizeof(a); // Correct. It returns 20 because 5*4 bytes.

sizeof是一元运算符,返回数据类型的大小(以字节数为单位)。

sizeof(std::array<int, 3>) == sizeof(int[3]) == 3 * sizeof(int)
class Foo
{
  int a, b;
};
sizeof(Foo) == sizeof(int) * 2

size()template<typename T, size_t S> std::array<T,S>的方法,该方法返回数组中的元素

std::array<int, 3> a = {1,2,3};
a.size() == 3;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM