私はcheckg gccとclangを持っており、両方とも警告を生成しません。私は、foo()からの一時的な生涯は、bar関数呼び出しのセミコロンが置かれている完全な式の終わりまで延長されると考えます。このコードはUBを引き起こしますか?
#include <iostream>
#include <string>
struct A
{
std::string foo() const{ return "aaa"; }
};
void bar(const char* c) {
std::cout << c;
}
int main()
{
A a;
bar(a.foo().c_str()); // Is this safe?
bar(a.foo().substr().c_str()); // or this
}
はい、あなたは正しい、それは –