C++ 将临时对象的c_str返回值传递给printf
下面的代码有效吗 A类{string m_name;C++ 将临时对象的c_str返回值传递给printf,c++,C++,下面的代码有效吗 A类{string m_name; 公众: 字符串getName(){return m_name;} } ..… printf(“%s”,object.getName().c_str()) 其中object.getName()返回一个临时字符串对象。在我看来是有效的,假设get name将返回一个标准字符串对象。临时字符串将持续一段时间,直到printf()完成,所以是安全合法的。提供的对象。getName()按值返回,或者通过引用仍然有效的内容: 是我写这篇文章时,您的代码
公众:
字符串getName(){return m_name;}
} ..…
printf(“%s”,object.getName().c_str())
其中object.getName()返回一个临时字符串对象。在我看来是有效的,假设get name将返回一个标准字符串对象。临时字符串将持续一段时间,直到
printf()
完成,所以是安全合法的。提供的对象。getName()按值返回,或者通过引用仍然有效的内容:
是我写这篇文章时,您的代码是:
class A { string m_name;
public:
string getName() { return m_name; }
}
.....
printf("%s", object.getName().c_str())
......
你问,代码有效吗
否,代码无效,因为
- 类定义末尾缺少分号,并且
语句末尾缺少分号printf
关于风格问题
string getName() { return m_name; }
缺少const
是一种不好的风格
您应该使成员函数const
,这样就可以在const
对象上调用它
< > >代码> > 前缀在C++中是一个讨厌的文体。你会写getSin
?<代码>获取< /Cord>前缀在java中有其用途,但C++中只是视觉噪声和文本冗长,即就像在一个漂亮的餐厅里玩沙滩球:在海滩上的好东西(java)在餐厅(C++)中不是很好。
<> >代码> >代码>调用在风格上是可以的,因为大多数C++程序员都会这样做,并且知道它是可以的。如果它是一个很少使用的结构,那么它可能是一个糟糕的风格,因为其他人可能会浪费时间检查它是否正式OK。这在形式上是可以的,因为临时变量会一直持续到完整表达式的结尾。getName的代码会很方便。回滚了一个从根本上改变问题以匹配答案的编辑。您甚至可以绑定到一个临时变量,
字符串const&t=object.getName()代码>并且在引用超出范围之前保持有效。@edA qa mort-ora-y:Yes,但这不是世界上可读性最好的代码。@Cheersandhth.-Alf你是在挑剔两个缺少的分号吗?@Cheersandhth.-Alf我想知道这个星球上的任何人怎么可能从你对我的编辑的颠倒中受益。@Cheersandhth.-Alf这真是难以置信。OP甚至没有正确地给问题的标题加上上限。你真的相信他故意省略了两个分号,然后问起了一个临时的问题吗?@匿名投票人:我猜你是周围的连续投票人之一。如果你不是,那么请向读者解释你的投票。你到底认为什么是错误的或缺失的(可能是错误的,但这正是沟通有利于清理的)。
printf("%s", object.getName().c_str());