Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将临时对象的c_str返回值传递给printf_C++ - Fatal编程技术网

C++ 将临时对象的c_str返回值传递给printf

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()按值返回,或者通过引用仍然有效的内容: 是我写这篇文章时,您的代码

下面的代码有效吗

A类{string m_name;
公众:
字符串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())
......
你问,代码有效吗

否,代码无效,因为

  • 类定义末尾缺少分号,并且
  • “…”无效为C++代码,
  • 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());