I am learning books <Effective C++>, i think use const reference is a good practice. because it can avoid unnecessary copy.
so, even in initialize a object, i use const T & t = T();
here is the code:
#include <string>
#include <iostream>
#include <vector>
using namespace std;
template <class T>
inline std::vector<std::string> Split(const std::string &str, const T &delim, const bool trim_empty = false) {
  if (str.empty()) return {}; 
  size_t pos, last_pos = 0, len;
  std::vector<std::string> tokens;
  std::string delim_s = ""; 
  delim_s += delim;
  while(true) {
    pos = str.find(delim_s, last_pos);
    if (pos == std::string::npos) pos = str.size();
    len = pos-last_pos;
    if ( !trim_empty || len != 0) tokens.push_back(str.substr(last_pos, len));
    if (pos == str.size()) break; 
    else last_pos = pos + delim_s.size();
  }   
  return tokens;
}
int main() {
  const std::string& str = "myname@is@haha@";  // compare with std::string = "", will this be better(in speed and memory)?
  const std::string& s = Split(str, "@").front();  // this crashed
  // std::string s = Split(str, "@").front();  // this ok
  cout << "result is " << s << endl;
}
As you see above, this code is used to split a string into vector<std::string>,
in main function:
I have two method to get the first element of the splited results.
1.const std::string& s = Split(str, "@").front();
2.std::string s = Split(str, "@").front();
in my test, option 1 will crashed, option2 is ok.
could you talk some difference of these?
and is it necessary to do this (const std::string& s = "asd";)?
comparing to std::string s = "asd", what is the advantages and disadvantages of them?
Aucun commentaire:
Enregistrer un commentaire