gpt4 book ai didi

c++ - 为什么在此处重写字符串文字(C++)?

转载 作者:行者123 更新时间:2023-12-01 14:04:26 24 4
gpt4 key购买 nike

我有一个持有指针的类。
我在这里只包含了骨架代码。
类构造函数需要一个字符串。

#include <iostream>
#include <string>

using namespace std;

class slice {
public:
slice(string s):
data_(s.data()),
size_(s.size()) {}

const string toString() {
string res(data_, data_+size_);
return res;
}

private:
const char* data_;
const size_t size_;
};

int main() {

slice a{"foo"};
slice b{"bar"};


cout << a.toString() << endl;
cout << b.toString() << endl;
}

这个程序的输出是:
$ g++ test.cpp && ./a.out 
bar
bar

我期待
foo
bar

这里发生了什么?对象a持有的指针是如何被覆盖的?

最佳答案

What is going on here? How is the pointer held by object a being overwritten?



您正在体验 undefined behavior .
slice(string s):
data_(s.data()),
size_(s.size()) {}

这里 string s是输入字符串的拷贝,并在构造函数的持续时间内有效。因此 s.data()构造函数完成后悬挂。

关于c++ - 为什么在此处重写字符串文字(C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com