मेरे पास चेक जीसीसी और क्लैंग है और दोनों कोई चेतावनी उत्पन्न नहीं करते हैं। मुझे लगता है कि foo() से अस्थायी जीवनकाल पूर्ण अभिव्यक्ति के अंत तक लंबे समय तक बढ़ाया जाएगा, जहां बार फ़ंक्शन कॉल में अर्धविराम स्थित है।क्या यह कोड यूबी का कारण बनता है?
#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
}
हाँ, तुम सही हो, यह सुरक्षित है –