giải thích tốt hơn bằng một ví dụ:gán tạm thời cho một thành viên ref const gây ra một lỗi segmentation
tok.h
#include <string>
static const char* defaultDelim = ".,;";
class Tokenizer {
public:
Tokenizer():
// 'delim' is the const ref member that is initialized by the temp string
delim((altDelim.size())? altDelim : std::string(defaultDelim))
{}
size_t scan(const std::string& str)
{ return str.find_first_of(delim); }
static void setDelim(const std::string& d) { altDelim = d; }
private:
static std::string altDelim;
const std::string& delim;
};
main.cpp
#include <iostream>
using namespace std;
#include "tok.h"
std::string Tokenizer::altDelim;
int main()
{
Tokenizer tok;
size_t pos = tok.scan("hello, world");
cout << pos << endl;
}
sự chương trình in 0 là sai. Mã thực sự bị lỗi seg.
Tôi mong rằng quy tắc kéo dài tuổi thọ của một temp được gán cho tham chiếu const sẽ giữ ở đây, nhưng có vẻ như không. Bạn có biết lý do không'?
Phát hiện, tôi không thấy lý do tại sao không có upvotes cho việc này. Chậm ngày hôm nay. :( –
ngắn gọn và toàn diện. Cảm ơn rất nhiều! – davka