What is the size (in bytes) for each of the literals '7', 7.0, “7”?
我的任务是这个问题,说实话,我不知道如何找到这些字节的大小。有人能指出我正确的方向吗?
答案 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
计算数组大小而不是指针大小的原因。)