从const char *`中隐式构造const std :: string有效吗?

问题描述 投票:0回答:1

[就像许多人一样,我习惯于将新的字符串函数作为const std::string &的函数编写。优点是效率(可以传递现有的std::string对象而不会产生复制/移动的开销)和灵活性/可读性(如果您只有const char *,则可以传递它并隐式完成构造,而不会造成混乱)您的代码具有显式std::string的构造):

#include <string>
#include <iostream>
unsigned int LengthOfStringlikeObject(const std::string & s)
{
    return s.length();
}
int main(int argc, const char * argv[])
{
    unsigned int n = LengthOfStringlikeObject(argv[0]);
    std::cout << "'" << argv[0] << "' has " << n << " characters\n";
}

我的目标是编写有效的跨平台代码,该代码可以有效处理长字符串。我的问题是,在隐式构造过程中会发生什么?是否可以保证不会复制字符串?令我惊讶的是,因为所有内容都是const,所以不需要复制-仅需要在现有指针周围进行薄的STL包装,但是我不确定该如何依赖于编译器和平台。始终显式编写该函数的两个版本,一个用于const std::string &,一个用于const char *,是否更安全?

c++ string stl const implicit-constructor
1个回答
0
投票

如果将const char*传递给带有std :: string的东西,则不管是否引用,都将构造一个字符串。

现在这可以由编译器进行优化,并且某些实现也不会为小字符串分配内存。

但是这取决于实现,并且不受您的控制。

© www.soinside.com 2019 - 2024. All rights reserved.