c++ - 如何存储 queue::front 返回的值?

标签 c++ pointers reference queue return-type

我有点不确定如何使用 std::queue 库中的 front() 函数返回的值。在网站 cplusplus.com 上,它说该函数返回一个引用。 但是,当我查看实际用法时,似乎直接使用该函数来获取

例如,按照这些步骤

std::queue<int> myqueue;
myqueue.push(30);

返回值应该存储如下:

int &some_number  = myqueue.front();

那么这怎么可能:

std::cout << "myqueue.front() returns " << myqueue.front() 
//myqueue.front() returns 30

如果它返回值的引用,是否意味着它返回值存储的位置,而不是值本身强>?那么如何打印位置打印出值而不是整数的地址。

此外,按照这个逻辑,这是否意味着这些也有效?

场景一

std::queue<int> myqueue;
myqueue.push(30);
int new_number = myqueue.front();

new_number 的值为 30

场景 2 -(someStruct 是一个已定义的结构)

std::queue<someStruct*> myqueue;
myqueue.push(someStruct* abcPtr); \\abcPtr has been initialized 
someStruct* edfPtr= myqueue.front();

edfPtr 将指向相同的位置 abcPtr 也指向。

如果是这样,那么将 std::queue::front 返回的值作为引用传递的意义何在?有谁知道用法背后的逻辑?

最佳答案

它确实返回一个引用,但是(就像其他情况一样)如果您从该类型的引用赋值给一个普通对象,则该引用引用的对象将被赋值。

int a = 1;
int &ra = a; // reference to a

int b = ra;  // initializes `b` to the value referred to by `ra`--1 in this case.

front() 的特定情况下,如果您存储的值很大,您可能希望避免创建它的额外拷贝。在这种情况下,您可以直接使用该引用,或使用它来初始化另一个引用以获得队列中值的别名,这样您就可以在不创建拷贝的情况下使用它。

class something_big {
    // lots of data here
};

std::queue<something_big> foo;

something_big bar = foo.front(); // copies entire item from front of queue into bar

something_big &baz = foo.front(); // no copy; just access item in queue

关于c++ - 如何存储 queue::front 返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48506732/

相关文章:

c - 读取数组时访问冲突

perl - 如何直接取消引用存储在另一个哈希中的哈希引用?

C++ 如何获得返回引用并将引用保存为函数中的局部变量?

c++ - 不匹配 "operator<<"(操作数类型为 'std::ostream'

c++ - 更改函数以使用 vector 而不是数组

c++ - 为什么 C++ 模板计算如此之快?

c++ - 语义 Action 提升

c++ - 结构成员在成功初始化后被垃圾值覆盖

c++ - 浅拷贝类指针数组

multithreading - 如何将对堆栈变量的引用传递给线程?