如果你有一个整数类型t1和一个通过引用获得可能更小的整数类型t2的函数,调用函数((t2)var_t1)会有问题吗?
答案 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 ++标签的原因之一......