文字的大小(以字节为单位)

时间:2014-03-01 02:19:08

标签: c++ visual-c++ byte literals

What is the size (in bytes) for each of the literals '7', 7.0, “7”?

我的任务是这个问题,说实话,我不知道如何找到这些字节的大小。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:3)

一种方法是使用sizeof运算符。

例如,

#include <iostream>
#include <math.h>

int main(int argc, char **argv)
{
    std::cout << "size of char 6 is " << sizeof('6') << std::endl;
    std::cout << "size of float 6.0 is " << sizeof(6.0) << std::endl;
    std::cout << "size of string 6 is " << sizeof("6") << std::endl;

    return 0;
}   

答案 1 :(得分:2)

为了教你如何捕鱼而不是给你一条鱼,让我们把它分成两部分。首先,我们如何找到这些文字的类型,typeid非常适合这个问题:

#include <typeinfo>
#include <iostream>

int main()
{
    std::cout << typeid( '7' ).name() << std::endl ;
    std::cout << typeid( 7.0 ).name() << std::endl ;
    std::cout << typeid( "7" ).name() << std::endl ;
}  

我们正在使用clang,因此输出如下( see it live ):

c
d
A2_c

Visual Studio中,您将直接获得类型( see it live

如果我们必须demangle,我们会使用c++filt -t,我们会看到:

char
double
char [2]

现在我们知道我们可以使用sizeof查找其大小的类型:

#include <typeinfo>
#include <iostream>

int main()
{
    std::cout << sizeof( char)  << std::endl ;
    std::cout << sizeof( double )  << std::endl ;
    std::cout << sizeof( char [2] ) << std::endl ;
}   

对我而言,结果是:

1
8
2

答案 2 :(得分:1)

要迂腐,一般情况下,文字本身没有实际尺寸。将“大小以字节为单位”的概念应用于非“物质”的概念,即不存在于存储器中是没有意义的。这里唯一的例外是字符串文字"7",这是一个左值。同时,'7'7.0不是左值。

无论如何,当你将sizeof应用于文字值时(如果你的意思是“以字节为单位的大小”),文字将被解释为一个简单的表达式。你得到的是表达式所具有的类型的大小。因此,'7'的类型为char,大小为1,7.0的类型为double,大小为sizeof(double)(取决于实现),"7"的类型为{ {1}}和尺寸2。

(注意,数组到指针的转换不适用于const char[2]的立即数操作数,这就是sizeof计算数组大小而不是指针大小的原因。)