C++ 为什么预定义流对象的大小因编译器而异?

C++ 为什么预定义流对象的大小因编译器而异?,c++,performance,language-lawyer,C++,Performance,Language Lawyer,在你们把它标记为复制品之前,我已经读过了。但它没有回答我的问题 我同意 SIEZOF(int)是C+C++中实现的行为。但当我在各种编译器上测试以下程序时,我感到惊讶 #include <iostream> using std::cout; int main() { cout << "Sizeof cout object: " << sizeof(cout) << '\n'; cout << &quo

在你们把它标记为复制品之前,我已经读过了。但它没有回答我的问题

我同意<强> SIEZOF(int)<强>是C+C++中实现的行为。但当我在各种编译器上测试以下程序时,我感到惊讶

#include <iostream>
using std::cout;
int main()
{
    cout << "Sizeof cout object: " << sizeof(cout) << '\n';
    cout << "Sizeof cin object: " << sizeof(std::cin) << '\n';
}
#包括
使用std::cout;
int main()
{

cout因为开发不同编译器的不同人员决定以不同的方式实现它

这些差异可能是由于优化的选择,也可能是受平台工作方式的影响。但如果不深入分析实现本身及其运行的平台,很难说得更多


如果你真的想知道更多,我认为你必须亲自深入研究这些实现,并开始询问它们的细节。

因为开发不同编译器的不同人员决定以不同的方式实现它

这些差异可能是由于优化的选择,也可能是受平台工作方式的影响。但如果不深入分析实现本身及其运行的平台,很难说得更多


如果你真的想知道更多,我认为你必须亲自深入研究这些实现,并开始询问它们的细节。

因为开发不同编译器的不同人员决定以不同的方式实现它

这些差异可能是由于优化的选择,也可能是受平台工作方式的影响。但如果不深入分析实现本身及其运行的平台,很难说得更多


如果你真的想知道更多,我认为你必须亲自深入研究这些实现,并开始询问它们的细节。

因为开发不同编译器的不同人员决定以不同的方式实现它

这些差异可能是由于优化的选择,也可能是受平台工作方式的影响。但如果不深入分析实现本身及其运行的平台,很难说得更多


如果你真的想知道更多,我认为你必须亲自深入研究这些实现,并开始询问它们的细节。

@downvorters:为什么是downvorts?有什么问题吗?为什么不定义实现?为什么所有实现都应该有相同的cout/cin实现?为什么这些对象应该是相同的当实现定义了
long
等基本类型的大小时,大小是否相同?我看不出你的问题有任何意义。为什么所有实现的大小都应该相同?这可能带来什么好处?在你的问题中,你已经有了部分答案。你已经理解基本类型ve实现特定的大小。但是类是由这些基本类型组成的。(顺便说一句,我没有投票,但我确实认为这个问题没有真正意义。)@hvd:你说“这可能带来什么好处?”告诉James gosling(Java创建者)和anders hejlsberg(C#创建者).难道你不认为可移植性是所有实现上具有相同大小的最大优势吗?那么为什么它不是Java&C#中定义的实现呢?@PravasiMeet Java和C#当然不能保证标准库的不同版本的库类具有相同的大小,而且不同版本的库类大小确实不同。这只是因为Java并且C++使用类的引用(它比C++引用更接近C++指针)除了C++之外,还有很多代码,最终使用了实际的类大小。@下行投票:为什么会下降?问题是什么?为什么不实现定义?为什么所有的实现都有相同的精确的CUT/CIN实现?为什么即使在基本类型Li的大小上,这些对象也应该是相同的大小?ke
long
实现定义了吗?我看不出你的问题有任何意义。为什么所有实现的大小都应该相同?这可能带来什么好处?你的问题中已经有了部分答案。你已经知道基本类型有实现特定的大小。但是类是由(顺便说一句,我没有投票,但我确实认为这个问题没有真正意义。)@hvd:你说“这可能带来什么好处?”。告诉詹姆斯·戈斯林(Java创建者)和安德斯·海尔斯伯格(C#创建者).难道你不认为可移植性是所有实现上具有相同大小的最大优势吗?那么为什么它不是Java&C#中定义的实现呢?@PravasiMeet Java和C#当然不能保证标准库的不同版本的库类具有相同的大小,而且不同版本的库类大小确实不同。这只是因为Java并且C++使用类的引用(它比C++引用更接近C++指针)除了C++之外,还有很多代码,最终使用了实际的类大小。@下行投票:为什么会下降?问题是什么?为什么不实现定义?为什么所有的实现都有相同的精确的CUT/CIN实现?为什么即使在基本类型Li的大小上,这些对象也应该是相同的大小?ke
long
实现定义了吗?我看不出你的问题有任何意义。为什么所有实现的大小都应该相同?这可能带来什么好处?你的问题中已经有了部分答案。你已经知道基本类型有实现特定的大小。但是类是由(顺便说一句,我没有投票,但我认为这个问题没有真正意义。)@hvd:你说“什么?”