我正在使用 Visual Studio Express 2013,并且正在尝试了解 C++ 中的不同内容。
我在编译器中偶然发现了一个有趣的错误,当显式类型转换为与引用相同的类型时,它似乎没有创建临时对象。
#include <iostream>
using namespace std;
int main()
{
int number; // float number;
number = 2;
const int& plainref_i = number;
const int& recastref_i = (int)number; // this goes wrong if number is int
const float& plainref_f = number;
const float& recastref_f = (float)number; // this goes wrong if number is float
number = 3;
std::cout << plainref_i << "\n";
std::cout << recastref_i << "\n";
std::cout << plainref_f << "\n";
std::cout << recastref_f << "\n";
return 0;
}
这将在 VS 中编译时产生以下输出:3 3 2 2
但是用 gcc 编译,结果如下: 3 2 2 2
如果我替换“int number;” 带有“浮点数;” 我进入 VS:2 2 3 3
并使用 gcc:2 2 3 2
我想知道是否有人可以确认这是一个错误,以及是否有人知道可行的解决方法/解决方案。