C ++通过引用问题

用户1291

如何将对集合的引用传递给另一个类,以使该类对其进行修改?尝试以直观的方式尝试(即传递和存储参考collection& c,然后使用该参考进行更新)似乎不起作用:

#include <iostream>
#include <vector>

class Test{
private:
    std::vector<int> testvec;

public:
    Test(std::vector<int>& vec){
        testvec = vec;
    }

    void add(int i){
        testvec.push_back(i);
    }

    void report(){
        std::cout << "testvec has " << testvec.size() << " items" << "\n";
        for(int i : testvec)
            std::cout << i << " ";
        if(!testvec.empty())
            std::cout << "\n";
    }
};

int main() {
    std::vector<int> myVec;

    Test test(myVec);
    for(int i = 0; i < 10; i++){
        test.add(i);
    }

    test.report();
    std::cout << "\n";
    std::cout << "myVec has " << myVec.size() << " items" << "\n";
    for(int i : myVec)
        std::cout << i << " ";

    return 0;
}

会给我

testvec有10个项目

0 1 2 3 4 5 6 7 8 9

myVec有0个项目

巴托斯·普尔兹别尔斯基

创建Test对象时,您是通过myVec引用传递的,但testvec实际上是一个值。因此它将复制当时的值myVec,这是一个空向量。改变

std::vector<int> testvec;

std::vector<int>& testvec;

它会工作。但是您还需要调整构造函数:

Test(std::vector<int>& myVec) : testvec(myVec) {}

对此发表评论:

由于membertestvec现在是引用,因此它必须指向内存中的某些现有对象。

必须在构造Test的实例时将其初始化,否则testvec将不是有效的引用类型,因此程序将格式错误。

初始化列表在构造函数主体之前触发。在这里,还为所有成员分配了默认值或指定的成员。对于引用,唯一有效的值是内存(或引用)中的现有对象,因此您必须明确地告诉引用成员必须使用它们初始化的值。

例如。

class A {
    int& t;
    A(int& T) : t(T) {} // * OK
    A(int& T) { t = T; } // ** ill-formed
}

(*)可以,因为在调用构造函数主体之前已将t其设置为T

(**)可能不正确,因为t在初始化列表之后设置了,所以在设置默认值的步骤之后。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++通过引用传递以及价值和缺点问题

来自分类Dev

在C#中通过引用传递值的语法问题

来自分类Dev

C#通过引用传递(ref关键字)问题

来自分类Dev

在C#中通过引用传递值的语法问题

来自分类Dev

C ++通过引用传递以及价值和缺点问题

来自分类Dev

通过引用在本地创建的C ++问题返回对象

来自分类Dev

通过引用返回C ++

来自分类Dev

c ++ Singleton通过引用使用

来自分类Dev

C ++类:通过引用传递

来自分类Dev

C ++通过引用函数传递

来自分类Dev

在C ++中通过引用传递?

来自分类Dev

指针并通过引用传递c ++

来自分类Dev

通过引用捕获C ++ Lambda

来自分类Dev

通过引用从C ++ \ CLI传递到C ++

来自分类Dev

通过参考问题C ++

来自分类Dev

C ++问题,引用无效指针时出错

来自分类Dev

汇编和 c - 按引用调用问题

来自分类Dev

通过引用传递问题-Java

来自分类Dev

在C中通过const引用传递

来自分类Dev

通过引用传递数组并修改值C ++

来自分类Dev

通过引用从函数调用的C ++构造函数

来自分类Dev

C ++:参数传递“通过引用传递”

来自分类Dev

在C中通过引用传递多维数组

来自分类Dev

通过引用或值枚举C ++ 11类

来自分类Dev

在C ++中通过引用传递对象

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

在C中通过引用传递数组

来自分类Dev

在C ++中通过引用返回堆块

来自分类Dev

C:在多个功能之间通过引用传递?