|
|
1
25
储存时间:
结合3.7.1阅读
类型:
动态分配(在标准内存区域afaik的上下文中从不使用“heap”一词)内存需要一个函数调用,该调用最早可以发生
|
|
|
2
13
此代码完全有效且一致。唯一的“gotcha”是确保调用者不会尝试释放字符串。 |
|
|
3
12
此代码有效且符合标准。 字符串文本存储在只读内存中,函数只获取所选字符串的地址。 C++标准(2.134)表示:
在这里,理解您的问题的关键是静态存储持续时间:字符串文本在程序启动时分配,并在程序持续时间内分配。您的函数只是获取地址并返回它。 |
|
4
5
技术上是的,它是有效的。
但事实并非如此。 这些是C字符串。C库和函数中的约定是返回应该释放的动态分配字符串。IE返回的指针隐式地将所有权传递回调用方(通常在C中也有例外)。 如果您不遵循这些约定,您将使许多有经验的C-Developers感到困惑,他们可能会期望这个约定。如果您不遵循这个标准期望,那么应该在代码中很好地记录它。 这也是C++(按你的标签)。因此,返回std::string更为传统。原因是,通过指针传递所有权只是隐含的(如果上述期望被打破但被记录,那么这会导致C代码中出现很多错误,不幸的是,代码的用户从未读取过documentaiton)。通过使用std::string,您传递的是一个对象,它们不再是任何所有权问题(结果作为一个值传回,因此是您的),但是因为它是一个对象,所以没有问题或资源分配问题。 如果你担心效率,我认为这是一个错误的担心。 如果要通过流进行打印,已经有了一个标准约定:
|
|
|
Oded S · 带有运算符重载函数的c++17求值顺序 8 年前 |
|
|
Menachem · 如何在解码Base64字符串时处理错误 8 年前 |
|
|
EFanZh · 有符号整数和无符号整数之间的转换 9 年前 |
|
|
nickcoxdotme · 关注点的角度和语义标记/分离 12 年前 |