以下代码是否有效?
A类{string m_name;
市民:
string getName(){return m_name; } }.....
printf(“%s”,object.getName()。c_str())
......
其中object.getName()返回一个临时字符串对象。
答案 0 :(得分:7)
临时字符串将持续到printf()
完成,所以是的,它是安全合法的。
答案 1 :(得分:2)
看起来对我有效,假设get name将返回一个标准的字符串对象。
答案 2 :(得分:2)
如果object.getName()按值返回,或者通过引用仍然有效的内容返回:
是
答案 3 :(得分:0)
我的代码正如我写的那样:
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
对象上调用它。
此外,get
前缀在风格上是令人厌恶的,在C ++中。你会写getSin
吗? get
前缀在Java中有一个目的,但在C ++中它只是视觉噪音和文本冗长,即它就像在一个精致的餐厅玩沙滩球:海滩上的好东西(Java)不是在餐厅这么好(C ++)。
printf("%s", object.getName().c_str());
.c_str()
调用在风格上是正常的,因为大多数C ++程序员都这样做,并且知道它没问题。如果它是一个很少使用的建筑,那么它可能是不好的风格,因为那时其他人可能浪费时间检查它是否正式。这是正式的,因为临时持续到完整表达式结束。