在[dcl.struct.bind] 9.6.4中,当初始化器是正确定义的类类型时,有结构化绑定的定义std\xe2\x80\x8b::\xe2\x80\x8btuple_\xc2\xadsize<E>\xe2\x80\x8b::\xe2\x80\x8bvalue:
\n\n...变量以唯一名称ri引入,如下所示:
\n
\n S Ui ri = 初始值设定项 ;
\n每个vi都是Ti类型的左值的名称,该左值引用绑定到ri的对象;\n引用的类型是Ti。
我的问题是为什么需要引入ri,我们不能直接定义标识符vi作为对结果的引用吗get<i>(e)?
当源值无法在目标类型中表示时,根据cppreference将整数转换为有符号类型
- 实现定义(C++20 之前)
- 目标类型的唯一值等于源值模 2^n ,其中 n 是用于表示目标类型的位数 (C++20 起)
GCC实现定义的行为中还指定了
为了转换为宽度为 N 的类型,该值会以 2^N 为模减少到该类型的范围内;没有发出任何信号。
我猜也有人说同样的话。我的问题是减少/模数结果是否仍然可能超出目标签名类型的范围?比如说signed char c = 255,255 模 2^8 仍然是 255,没有变化。这个模数结果如何适合目标类型?
这个答案展示了一种方法,首先将值反转并加 1,然后在前面添加一个有符号位。我不确定这是否是实际所做的。
解释强调部分的正确/标准方法是什么?
c++ implicit-conversion c++20 implementation-defined-behavior