pop_back() 不工作

pop_back() not working

我有以下创建一个 Stack 对象的主程序,用双打填充它然后弹出它们。代码文件很好,但 pop_back() 部分似乎不起作用,而 s.back() 确实 return 正确的值。这怎么可能?

#include "Stack.h"
#include <iostream>
#include <deque>
using namespace std;
int main() {

  Stack<double> s(0,0.0);

  // Write doubles into Stack
  int i ;
  for (i=0 ; i<15 ; i++) {

    s.push(i*i) ;

  }


  // Read doubles back from fifo
  while (!s.empty()) {
    double val = s.pop() ;
    std::cout << "Popping value " << val << " from stack" << std::endl ;

  }

  return 0 ;

}

我的头文件是这样的,我省略了与问题无关的部分。

#ifndef STACK_H
#define STACK_H

#include <iostream>
#include <deque>  

template<class T>
class Stack {

public:  

  Stack(int len, T defval): s(len+1, defval) {

    return;
}

~Stack() {

    //delete [] s;
}

void push(T c) {

    s.push_back(c);

}

T pop() {

    return s.back();
    s.pop_back();  

}

private:   

  std::deque<T> s; //Array<T> s;  

};

#endif
T pop() {
    return s.back();
//  ^^^^^

    s.pop_back(); // <- unreachable! 
}

当你从一个函数return时,所有后续指令将永远不会被执行


s.back() 的结果存储在一个临时变量中:

T pop() {
    auto back = s.back();
    s.pop_back();  
    return back;
}