C++ 推送到STL堆栈上是按引用传递的,但堆栈是否复制了该值?

C++ 推送到STL堆栈上是按引用传递的,但堆栈是否复制了该值?,c++,stl,stack,C++,Stl,Stack,在网上查看文档时,我发现它是通过引用传递的。是否有人能确认堆栈确实复制了数据?是。在C++11中,如果给它一个临时或std::move,它也可以移动它 请注意,C++11还提供了直接就地构造值的构造函数参数。是。在C++11中,如果给它一个临时或std::move,它也可以移动它 请注意,C++11还提供了直接就地构造值的构造函数参数。这取决于。该值已被复制,但可能无法按您的想法工作。如果按下指针,例如char*,它将只复制指针值,而不是整个字符串。如果按的是简单的int,或CustomObje

在网上查看文档时,我发现它是通过引用传递的。是否有人能确认堆栈确实复制了数据?

是。在C++11中,如果给它一个临时或
std::move
,它也可以移动它

请注意,C++11还提供了直接就地构造值的构造函数参数。

是。在C++11中,如果给它一个临时或
std::move
,它也可以移动它


请注意,C++11还提供了直接就地构造值的构造函数参数。

这取决于。该值已被复制,但可能无法按您的想法工作。如果按下指针,例如
char*
,它将只复制指针值,而不是整个字符串。如果按的是简单的
int
,或
CustomObject
,而不是指针,则会复制该指针。

视情况而定。该值已被复制,但可能无法按您的想法工作。如果按下指针,例如
char*
,它将只复制指针值,而不是整个字符串。如果你按下一个简单的
int
,或者
CustomObject
,而不是指针,它将被复制。

堆栈的参数本身是通过引用的,但是请记住
堆栈
只是一个适配器——它的
推送
会立即调用
推送
,并传递相同的参数。但是,此调用按值传递参数


因此,您传递的参数确实会被复制——通过引用传递到
std::stack
意味着它只被复制一次。如果这是一个传递值,那么它将被复制两次(暂时忽略编译器,忽略复制,这几乎可以肯定)。

堆栈
适配器本身的参数是通过引用,但是请记住,
stack
只是一个适配器——它的
push
会立即调用
push\u back
,并传递相同的参数。但是,此调用按值传递参数


因此,您传递的参数确实会被复制——通过引用传递到
std::stack
意味着它只被复制一次。如果这是一个传递值,那么它将被复制两次(暂时忽略编译器,忽略复制,这几乎可以肯定)。

@NiklasB.:你比我快30秒;)@你比我快30秒;)