str 应该属于局部变量, 这样的话 ta.push str 的引用值会不会有问题?相当于从局部函数返回一个引用
void foo(stack<string> &ta){ string str("abcdefg"); ta.push(str); // void push(const value_type& _Val) } int main(){ stack<string> ta; foo(ta); cout << move(ta.top()).c_str() << endl; }
解决方案
20
ta.push(str); // void push(const value_type& _Val)
虽然传的参数_Val是引用,实际上真正push操作的并不是引用,还是整个变量
再说,从这个定义来看 stack<string> ta;
栈里面保存的应该都是string,而不是string的引用
虽然传的参数_Val是引用,实际上真正push操作的并不是引用,还是整个变量
再说,从这个定义来看 stack<string> ta;
栈里面保存的应该都是string,而不是string的引用
20
stack<string> 这个stack结构里的每个string元素又不是引用。
ta.push(str); 实际做了个copy操作。ta里创建了个新元素(或指派了个已经存在的元素),然后把str的内容copy给了这个元素。
所以没什么问题
ta.push(str); 实际做了个copy操作。ta里创建了个新元素(或指派了个已经存在的元素),然后把str的内容copy给了这个元素。
所以没什么问题
20
push的时候会发生copy,调用copy构造函数。
40
全部容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器的每一个元素都必须能够拷贝。
40
不会,push进去的str是这个临时对象的一个复制对象,所以这个str之后析构不会影响到它