C++ 通过引用传递的强制转换整数类型

C++ 通过引用传递的强制转换整数类型,c++,integer,C++,Integer,如果您有一个整数类型t1,并且函数通过引用得到一个可能更小的整数类型t2,那么调用函数((t2)var_t1)会有问题吗?强制转换将创建一个临时类型,如果较小的类型不通过常量引用,那么您的代码将不会编译,因为时间不能绑定到非常量引用 如果它确实通过const引用进行转换,那么它将进行编译,但强制转换可能会导致溢出,这是将较大的数据类型强制转换为较小的数据类型的常见问题。如果且仅当函数采用const引用,则强制转换为t2,在这种情况下,可以将强制转换到t2生成的临时值绑定到它 因为这违背了引用整型

如果您有一个整数类型t1,并且函数通过引用得到一个可能更小的整数类型t2,那么调用函数((t2)var_t1)会有问题吗?

强制转换将创建一个临时类型,如果较小的类型不通过
常量
引用,那么您的代码将不会编译,因为时间不能绑定到非常量引用


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

如果且仅当函数采用const引用,则强制转换为
t2
,在这种情况下,可以将强制转换到
t2
生成的临时值绑定到它

因为这违背了引用整型的目的,我假设引用是非常量的,所以答案是:是的,这会有问题。明确地说,如果您强制转换为
t2
,它甚至不会编译


如果希望
函数
仅修改
t1
变量的一部分,请在引用/指针上使用
重新解释
。当然,从理论上讲,这将调用未定义的行为。

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

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

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

注意,这是有效的C,但不是C++,这是不应该混合C和C++标签的原因之一……

只是记住,这种行为的不确定性在大Endiad平台上不是很理论,它会修改变量的错误部分。没错,大端平台正在变得越来越稀少,但它们肯定还没有灭绝。没错,但大端平台和小端平台一样,都没有定义。但是如果目标架构已知,结果应该是可预测的,这就是我所说的“理论”的意思。当然,这并不能使它变得更好……C++和C是不同的语言。我已经删除了C标签。