gpt4 book ai didi

c++ - 因为我们有 move 语义,所以不需要为 STL 容器参数使用 const & 吗?

转载 作者:太空狗 更新时间:2023-10-29 19:45:38 26 4
gpt4 key购买 nike

通常我用它来避免复制成本:

void bar(const string& s);
void foo(const vector<int>& v);

C++11中的STL容器是否都支持 move 语义?

如果是这样,下面的代码是否具有与 const & 相同的性能?

void bar(string s);
void foo(vector<int> v);

最佳答案

move 语义不仅仅神奇地让您的代码更快。

有了它们,调用像 void bar(string s) 这样的函数会比必须复制参数更快,但前提是参数可以 move 。考虑这种情况:

std::string prompt(std::string prompt_text);

void askOnce(std::string question) { prompt(question); }

void askManyTimes(std::string question) {
for(int i=0; i<10; ++i) {
askOnce(question);
}
}

askOnce 的情况下,参数可以复制到函数中或 move 。调用提示时,可以 move 参数。

然而,在 askManyTimes 中,您需要保持争论,这样您就无法 move ,因此您实际上最终不得不无缘无故地创建 10 个问题拷贝。

通常,如果您不需要修改您的字符串或将其复制到其他地方,您仍然应该使用const std::string&;如果您稍后需要复制,您可以关闭引用。

关于c++ - 因为我们有 move 语义,所以不需要为 STL 容器参数使用 const & 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com