相关疑难解决方法(0)

119
推荐指数
1
解决办法
6万
查看次数

返回局部变量而不复制它们

我是 C++ 的新手,想知道是否有办法在函数中创建对象,然后返回该对象而不必将其复制到内存中。我知道原始本地对象超出范围,但我希望编译器可以优化它,使对象的副本只重用相同的内存地址。

int foo()
{
    int bar = 5;
    std::cout << &bar << std::endl;

    return bar;
}

int main()
{
    char a;
    auto b = foo();
    std::cout << &b << std::endl;
    std::cin >> a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将返回不同的内存地址。既然bar的地址不再需要,而且b的大小总是一样的,那么有什么理由不能只使用相同的地址并省去复制的步骤呢?


对于一个简单的整数并不重要,但对于更大的对象,确保返回的对象不会被复制到内存中的首选方法是什么?

以下是一个好方法吗?

int & foo(int & bar)
{
    std::cout << &bar << std::endl;
    // do things with bar
    return bar;
}

int main()
{
    char a;
    auto bar = 5;
    auto & b = foo(bar);
    std::cout << &b << std::endl;
    std::cin …
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
1156
查看次数

获取std :: list的前N个元素?

如果N> =列表大小(并处理N = 0),获取作为std :: list的前N个元素或整个列表的新列表的正确和安全的方法是什么?

更新

实际上我不一定需要新的列表,我只想在后续代码中对列表的子集进行操作.我假设创建一个新列表是一种合理的方法(注意列表大小通常低于50).

c++ stdlist visual-c++-2010

1
推荐指数
2
解决办法
4709
查看次数

标签 统计

c++ ×3

c++11 ×1

rvalue-reference ×1

stdlist ×1

visual-c++-2010 ×1