通过引用传递的转换整数类型

时间:2011-05-02 11:28:06

标签: c++ integer

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

4 个答案:

答案 0 :(得分:2)

当且仅当函数采用 const引用时,转换为t2会很好,在这种情况下,转换为t2生成的临时值可能是绑定它。

由于这违背了对整数类型的引用的目的,我会假设引用是非const的,所以答案是:是的,这将是有问题的。要清楚,如果你转向t2,它甚至都不会编译。

如果您希望 function仅修改t1变量的部分内容,请在引用/指针上使用reinterpret_cast。理论上,这会引发未定义的行为。

答案 1 :(得分:1)

Casting将创建一个临时的,如果较小的类型不是const 引用,则代码将无法编译,因为tempory不能绑定到非const引用。

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

答案 2 :(得分:1)

该函数必须采用const引用,否则无法编译。

答案 3 :(得分:0)

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

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

请注意,这是有效的C而不是C ++,这是你不应该混合C和C ++标签的原因之一......