在您开始将此标记为重复之前,我已经阅读了this。但它没有回答我的问题。
我同意 sizeof(int)是C& C中的实现定义行为。 C ++。但是当我在各种编译器上测试以下程序时,我感到很惊讶。
PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];//class name is Score
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (int i = 0; i<=objects.count; i++){
NSArray *array = [objects objectAtIndex:i];//Selects the first "object" from all the "objects"
NSNumber *test= [objects objectAtIndex:i];
array = [array valueForKey:@"highScore"];
test = [test valueForKey:@"highScore"];
test1 = [test intValue];//test1 is the current database object highScore for the current object
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
g ++ 4.8.1&amp;的输出4.9.2
cout对象的大小:140
cin对象的大小:144
Visual Studio 2010上的输出
cout对象的大小:80
尺寸cin对象:88
在线编译器输出(参见实时演示here)
cout对象的大小:272
cin对象的大小:280
我的问题是为什么它是实现定义的行为?为什么在C ++的所有实现上都没有相同的大小?如果它们在所有编译器上具有相同的大小,那不是吗?我的朋友告诉我,这个决定是由硬件和硬件决定的。表现原因。如果您在最低级别深入解释答案,那将非常有帮助。硬件如何在这里发挥作用?如何通过在不同的实现上使用不同大小的类型来获得性能?为什么cin&amp;的尺寸差别很大?在各种编译器的上述程序中的cout对象?
答案 0 :(得分:3)
因为开发不同编译器的不同人决定以不同的方式实现它。
也许差异可能是由于优化的选择或受平台工作的基本方式的影响。但是,如果不对实现本身及其运行的平台进行深入分析,就很难说更多。
如果您真的想了解更多信息,我认为您必须亲自深入了解这些实施并开始询问它们的具体细节。