繁体   English   中英

C ++如何处理具有相同名称的对象向量?

[英]How does C++ cope with vector of objects with the same name?

假设我在某个本地范围内创建了一个对象,并将其添加到该范围外的矢量中。

std::vector<sometype> Vec;
for( int i = 0, etc... )
{
    sometype Object;
    Vec.push_back(Object);
}

现在,对象的副本将传递给Vec,对象本身将被销毁。

但是,如果继续这样做,我将继续创建存储在向量中的许多名称为“ Object”的对象。 现在,我可以通过它们的索引访问它们,但是C ++如何处理我显然有许多同名对象的事实?

sometype对象的名称无关紧要。 您是正确的,每次调用push_back都会将Object的副本放置到Vec上,但这不是放置在矢量上的对象的名称。 实际对象放置在向量中,可以通过正确索引向量来引用。

对象的名称不是Object 那是变量的名称。 用于复制构造vector元素的变量的名称与该元素没有任何关系。

对象通常没有名称。 有些确实如此,尤其是那些由变量命名的对象。 但是动态构造的对象却没有。 即使对象的变量和名称之间的连接也很松散。 例如,如果您只有一个对象的指针,则无法找出该对象是否由变量命名。

只需将变量名视为某些内存地址的替代表示即可(对您来说是透明的!)。 您已经在内存中的某个特定位置创建了一个对象,该对象由您的变量名引用。 现在,您将对象复制到一个新的位置,该地址具有一个不同的地址,该地址与原始对象所处的地址完全无关,因此它也将获得一个新的“名称”,而变量名仍引用旧地址(只要仍在范围内)。

当然,在向量内部,这个新的“名称”不仅是地址,而且是如何找到它的秘诀( vec[someIndex] :“转到向量内部数据的开头,您将在距向量的给定偏移量处找到对象那里”,这是;荒唐地说的,索引运算符的实际作用-再次对您透明)。

C ++如何处理具有相同名称的对象向量。

不合逻辑的推论。

在您的for循环中,单词“ Object”出现2次。

a)第一个出现的“ sometype Object;”是对“自动”内存区域的声明和初始化。 在这种情况下,“对象”一词在有限的范围和生存期内标识实例的位置。

b)第二次出现“ Vec.push_back(Object);”是编译器生成代码以将实例传递给函数“ push_back”的命令。 在这里,它是通过引用(而不是值)传递的,这意味着函数“接收”的地址,而不是实际实例。

区别是:

  • 该函数的形式参数是“常量T&值”

(基于cppreference.com,其中函数以正式名称“值”声明为std :: vector :: push_back(const T&value)。)

  • 实际参数起作用的是“ sometype&Object”。

(根据您的代码)

  • 显然,这两个名称不相同。

因此,您的问题得出的结论是“结论或陈述在逻辑上不遵循先前的论点或陈述。”


摘要:

a)您的代码中没有什么叫做“值”或“ T”。

b)如果检查了std :: vector代码,则不会找到“ sometype”或“ Object”。

名称不一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM