gpt4 book ai didi

c++ - 临时函数调用 : UB?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:18 27 4
gpt4 key购买 nike

<分区>

考虑以下代码,基于 this answer :

#include <iostream>
#include <sstream>

class StringBuilder {
public:
template <typename T> inline StringBuilder &operator<<(T const &t) {
ss << t;
return *this;
}

inline char const * c_str() {
return ss.str().c_str();
}

private:
std::stringstream ss;
};

void foo(const char *x) {
std::cout << x << std::endl;
}

int main() {
foo((StringBuilder() << "testing " << 12 << 3 << 4).c_str());
return 0;
}

使用临时 StringBuilder 的返回值调用 foo() 是否会以任何方式导致 UB?

我问的原因是上面的例子很好用,但在现实生活中我使用的是一个库,除其他外,它包含日志记录工具,使用这个库我会得到不正确的输出(日志记录函数正确地接受了我的 char* 但在内部覆盖了它,这让我相信内存不再有效)。

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