所以我有以下代码:
#include <iostream>
#include <string>
#include <array>
using namespace std;
int main()
{
array<long, 3> test_vars = { 121, 319225, 15241383936 };
for (long test_var : test_vars) {
cout << test_var << endl;
}
}
在Visual Studio中,我得到以下输出:
在网站cpp.sh上执行的相同代码给出了以下输出:
我希望输出类似于cpp.sh的输出。我不理解Visual Studio的输出。这可能很简单;但是如果有人可以告诉我怎么了,我还是很感激。这已经成为我烦恼的真正根源。
答案 0 :(得分:7)
MSVC使用4字节long
。 C ++标准仅保证long
至少与int
一样大。因此,signed long
可以代表的最大数量为2.147.483.647
。您输入的内容太大,无法被long
保留,因此您将必须使用更大的数据类型,至少64位。
另一个编译器使用了64位宽的long
,这就是它在此处工作的原因。
您可以使用cstdint
header中定义的int64_t
。这样可以保证带符号的int的64位大小。
您的程序将显示为:
#include <cstdint>
#include <iostream>
#include <array>
using namespace std;
int main()
{
array<int64_t, 3> test_vars = { 121, 319225, 15241383936 };
for (int64_t test_var : test_vars) {
cout << test_var << endl;
}
}