官术网_书友最值得收藏!

  • Expert C++
  • Vardan Grigoryan Shunguang Wu
  • 223字
  • 2021-06-24 16:34:00

Identity

Identity is what differentiates one object from another. Even if we try to declare two physically indistinguishable objects, they will still have different names for their variables, that is, different identities:

Product book1;
book1.rating = 4;
book1.name = "Book";
Product book2;
book2.rating = 4;
book2.name = "Book";

The objects in the preceding example have the same state, but they differ by the names we refer to them by, that is, book1 and book2. Let's say we had the ability to somehow create objects with the same name, as shown in the following code:

Product prod;
Product prod; // won't compile, but still "what if?"

If this was the case, they would still have different addresses in memory:

Identity is a fundamental property of the object and is one of the reasons why we can't create empty objects, such as the following:

struct Empty {};

int main() {
Empty e;
std::cout << sizeof(e);
}

The preceding code will not output 0 as expected. The size of an empty object is not specified in the standard; compiler developers tend to allocate 1 byte for such objects, though you might encounter 4 or 8 as well. Two or more instances of Empty should have different addresses in memory, so the compiler must make sure objects will take up at least 1 byte of memory.

主站蜘蛛池模板: 赣州市| 色达县| 海安县| 甘肃省| 雅安市| 淮安市| 柳江县| 兴和县| 利辛县| 阿拉尔市| 公主岭市| 商丘市| 顺昌县| 湾仔区| 曲阜市| 六安市| 铜梁县| 彭山县| 永丰县| 邢台县| 宽甸| 鄂伦春自治旗| 昌邑市| 诸城市| 昂仁县| 睢宁县| 南丰县| 和政县| 全州县| 横峰县| 三台县| 鄂托克旗| 瑞丽市| 二连浩特市| 汕尾市| 鄂托克前旗| 张家界市| 绥江县| 昌平区| 临猗县| 南昌市|