低于代码有效 - 非UB?
struct GeoPoint {
std::string toString() const {
return std::string("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
}
};
struct Data {
const GeoPoint getPt() const {
return GeoPoint();
}
};
void foo(const char* c) {
std::cout << c << std::endl;
}
int main()
{
Data dr;
foo(dr.getPt().toString().c_str());
}
我的理解是在函数参数求值期间创建的临时值被销毁,直到完整表达式结束 - 因此函数执行,然后结束然后临时。被毁了。我对吗?我在类似的代码中遇到崩溃,但该函数实际上通过可变数量的参数宏获取可变数量的参数。所以代码看起来更像是这样:
void log_print(char const * szFormat, ...) { ... }
#define LOG(fmt, ...) do { \
log_print(fmt, ##__VA_ARGS__);\
} while(0)
Data dr;
LOG("%s", dr.getPt().toString().c_str());
答案 0 :(得分:3)
代码定义明确。
c_str()
返回的指针在foo
调用的生命周期内有效:匿名临时值在语句结束前不会超出范围foo(dr.getPt().toString().c_str());
。 / p>