GCC 编译器对类型转换有什么作用?为什么 mac 和 Linux 上的输出不同
What does GCC compiler do to type conversion? Why the output on mac and linux are different?
我在作用域中对变量b(范围外的声明(进行了类型转换,并为b提供了一个新的val,当作用域结束时,b的val似乎是错误的。
这发生在我的Macbook上,哪个版本的gcc是gcc-8(自制GCC 8.3.0(8.3.0。 我在 gcc 版本为 5.4.0 的 linux 笔记本电脑上尝试了相同的代码,并且代码运行良好。
std::vector<int> a = {1,2,3,4};
int b;
{
size_t i = 0, b = a[i];
//this time type of b is size_t
++i;
b = a[i];
}
std::cout << "b = " << b << std::endl;
在我的 Mac 上,结果是b = 0
在 Ubuntu 16 上,结果是b = 1
两个版本的 gcc 在类型转换上有什么区别?
还是错误?
您没有进行任何类型转换,而是在作用域中创建第二个b
,由于它具有相同的名称,因此会遮蔽外部b
。这意味着您正在为内部b
分配一些内容,而保留外部b
不变。一旦作用域结束(在右大括号处(,你就会剩下(未初始化的(外部b
,打印它会调用未定义的行为,这正是你正在经历的。
这段代码在语义上是等效的,可能会更好地显示实际发生的情况:
vector<int> a = {1,2,3,4};
int outer_b;
{
size_t i = 0, inner_b = a[i];
//this time type of b is size_t
++i;
inner_b = a[i];
}
cout << "b = " << outer_b << endl;
相关文章:
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- 在linux上使用g++输出错误,在windows上更正
- 将 Linux system() 调用命令的输出重定向到仅可变的
- Linux MinGW:在编译时,他输出了 8 个"nultiple definitions"列表
- Linux Ubuntu 中的文件内输出 unicode 符号
- GCC 编译器对类型转换有什么作用?为什么 mac 和 Linux 上的输出不同
- 在程序中获取 Linux 'dd' 命令的输出时遇到问题C++
- 文件不会将输出保存到文件中,并在 Linux C++奇怪地打印出一个字符串
- 在 linux C++ 中生成输出文件
- 在 c++ 中执行 Linux shell 命令,同时隐藏其输出
- 在Linux上将stdout重定向到文件时,C++程序无法产生输出
- C++将音频数据发送到Linux和Mac OS X上的扬声器输出
- 是否有任何标准的 Linux C++输入库输出和使用
- Linux 标准输出管道问题
- linux c++串行端口回显输出
- 如何将linux命令的输出复制到C++变量中
- Linux终端中C++的奇怪输出
- 输出字符串使用 C++ 覆盖 Linux 终端上的最后一个字符串
- Linux执行程序没有得到输出的值