我使用Eclipse编写,编译,构建和运行此代码。在Windows和Linux上都有。
Card.h
class Card {
private:
static int _palette[][3];
public:
static int (*palette())[3];
};
Card.cpp
#include "Card.h"
int Card::_palette[][3]= {
{168, 0, 32},
{228, 92, 16},
{248, 216, 120},
{88, 216, 84},
{0, 120, 248},
{104, 68, 252},
{216, 0, 204},
{248, 120, 248}
};
main.cpp
#include <iostream>
#include "Card.h"
int main(int argc, char **argv) {
int uniqueColors= sizeof(Card::palette());
std::cout << uniqueColors << std::endl;
return 0;
}
这将在我的Windows10操作系统上打印4
,在Debian 8.2 Jessie上打印8
。
当我使用MinGW GCC工具链和CDT内部构建器构建时,这是64位Win10上的Eclipse控制台:
16:53:09 **** Rebuild of configuration Debug for project sizeOf-test ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o Card.o "..\\Card.cpp"
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp"
g++ -o sizeOf-test.exe Card.o main.o -lmingw32
16:53:11 Build Finished (took 1s.934ms)
当我运行该程序时,它会打印4
。
这是64位Debian 8.2 Jessie上的Eclipse控制台,使用Linux GCC工具链和CDT内部构建器:
17:17:57 **** Incremental Build of configuration Debug for project cpp-sizeof-test ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o ../main.cpp
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o Card.o ../Card.cpp
g++ -o cpp-sizeof-test Card.o main.o
17:17:57 Build Finished (took 327ms)
_palette
中正确数量的数组?答案 0 :(得分:3)
你的函数palette
返回一个指针; sizeof
告诉你sizeof
系统上的指针。显然,Linux和Windows机器上的sizeof
指针是不同的,这就是为什么你会得到不同的结果。 sizeof
无法跟踪附加到指针的内存量,您必须手动跟踪它。