代码之家  ›  专栏  ›  技术社区  ›  geza

基本类型的复制/分配

  •  2
  • geza  · 技术社区  · 6 年前

    标准对基本类型的复制/分配有何规定?

    对于类类型,我们有复制构造函数、赋值运算符,它将右侧作为引用(它必须是引用,否则我们有无限递归):

    struct Foo {
        Foo(const Foo &);
    };
    

    const Foo foo;
    Foo f = foo;
    
    const int a = 2;
    int b = a;
    

    在这里 f = foo; odr使用 foo b = a odr会使用吗 a 也是这样吗?若否,如何处理??

    1 回复  |  直到 6 年前
        1
  •  7
  •   StoryTeller - Unslander Monica    6 年前

    我们可以追踪它。从[dcl.init]开始。

    (17.8) 是初始值设定项表达式的(可能已转换)值。 如有必要,将使用标准转换来转换 目的地类型;不考虑用户定义的转换。如果 无法进行转换,初始化格式不正确。什么时候 使用无法表示的值初始化位字段时 位字段的结果值由实现定义。

    a . 但是odr没有使用 A. . 因为我们可以在[basic.def.odr]中看到

    2 变数 x 其名称显示为可能计算的表达式 前任 odr是否由用户使用 除非将左值应用于右值转换 到 x 生成一个不调用任何非平凡函数的常量表达式 功能和(如果有) 是一个物体, 是集合的一个元素 表达式的潜在结果 ,而 E 是一个被丢弃的值 表情。

    A. 是的常量表达式和替换 x ex 上面演示了它保存条件的另一半,因此不使用odr。