将c_str临时对象的返回值传递给printf
pass c_str return value of temporary object to printf
下面这段代码有效吗?
类A {string m_name;
公众:
字符串getName(){返回m_name;}
}
…printf("% s", object.getName () .c_str ())
…
object. getname()返回一个临时字符串对象
临时字符串将持续到printf()
完成,所以是的,它是安全合法的。
对我来说是有效的,假设get name将返回一个标准字符串对象。
提供的object.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++中,get
前缀在风格上是令人讨厌的。你会写getSin
吗?get
前缀在Java中是有目的的,但在c++中它只是视觉上的噪音和文本上的冗长,也就是说,它就像在一家高级餐馆里玩沙滩球:在海滩上(Java)很好看的东西在餐馆里(c++)就不那么好看了。
printf("%s", object.getName().c_str());
.c_str()
调用在风格上是OK的,因为大多数c++程序员都这样做,并且知道它是OK的。如果它是一个很少使用的结构,那么它可能是糟糕的风格,因为其他人可能会浪费时间检查它是否正式可行。这在形式上是可以的,因为临时符一直持续到完整表达式结束。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 动态数组传递给 main 中用随机值填充的函数,返回值3221226356
- 通过引用将函数传递给 TBB 任务时无法返回值
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- C++,如何将返回值的函数传递给 func
- 将空数组传递给函数,在该函数中输入值并返回值的示例
- 为什么我需要为传递给 Y 运算器的函数指定返回值
- 了解工厂方法和静态变量赋值的返回值优化 (Visual Studio)
- 此函数如何在不应该返回值时返回值?
- 将c_str临时对象的返回值传递给printf
- 当我从赋值操作符返回值时,首先,调用复制构造函数的机制和基础是什么?