2011-05-02 66 views
3

如果您有一个整型t1和一个函数通过引用获得可能较小的整型t2,调用函数((t2)var_t1)会有问题吗?通过引用传递的整型类型

+0

C++和C是不同的语言。我已经删除了C标签。 – 2011-05-02 14:47:57

回答

2

当且仅当该功能拿了const引用,在这种情况下,由投产生的t2临时可以绑定到这将是罚款,强制转换为t2

既然这样会导致整数类型的引用的目的,我会假定引用是非常量的,所以答案是:是的,这是有问题的。要清楚的是,如果您投射到t2,它甚至不会编译。

如果你想function修改t1变量只有部分,在参考/指针使用reinterpret_cast。当然,这在理论上会调用未定义的行为。

+1

只要记住,这种行为的不确定性在大端平台上不是那么理论化,它会修改变量的错误部分。真正的大端平台正在变得越来越稀少,但它们绝对不会绝迹。 – 2011-05-02 11:42:16

+0

确实如此,但它在Big Endian上与Little Endian中的未定义一样。但是如果目标架构是已知的,那么结果应该是可以预测的,这就是我所说的'理论'。当然,这并没有让它变得更好...... – 2011-05-02 11:46:15

1

投射会创建一个临时的,如果较小的类型不采用const参考,您的代码将不会编译,因为暂时不能绑定到非常量引用。

如果确实需要const参考,那么它会进行编译,但是可能会导致溢出,这是将较大数据类型转换为较小数据类型时的常见问题。

1

函数将不得不采取const引用,否则它不会编译。

0

由于您还标记了问题C,在这种情况下,“通过引用”意味着使用指针,因此无法将&运算符应用于演员表的结果。但是,你可以使用:

function((t2 [1]){ (t2)var }); 

注意,是有效C,但不是C++,你不应该混合C和C++代码的原因之一......