标签: temporary-objects

c ++临时对象问题

这两个函数之间创建的临时对象的数量是否有差异?

string foo1() {
    return "";
} 

string foo2() {
    string s = "";
    return s;
}
Run Code Online (Sandbox Code Playgroud)

这是一个功课问题所以请假设没有编译器优化.

c++ temporary-objects

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

wstring :: c_str()包含垃圾

我有一个std::wstring decode(const char *s)功能.

我这样使用它:

const char *src = "some string";
const wchar_t *result = decode(src).c_str();
Run Code Online (Sandbox Code Playgroud)

我总是得到垃圾result[0],有时result[1]也是垃圾.

当我以另一种方式使用它时,我不会得到垃圾:

std::wstring res = decode(src);
const wchar_t *result = res.c_str();
Run Code Online (Sandbox Code Playgroud)

我的decode功能定义如下,它确实起作用了.唯一的问题是调用代码(上图).

std::wstring decode(const char *s, UINT cp=CP_ACP)
{
    if(s == NULL)
        return std::wstring();
    int length = ::MultiByteToWideChar(cp, 0, s, -1, NULL, 0 );
    wchar_t *buf = new wchar_t[length];
    ::MultiByteToWideChar(cp, 0, s, -1, buf, length);
    std::wstring r(buf);
    delete[] buf;
    return r;
}
Run Code Online (Sandbox Code Playgroud)

我使用Visual C++ 2008 SP1进行编译.

c++ visual-studio-2008 temporary-objects

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

功能模板按值和参考差异

我正在学习本教程 - http://www.learncpp.com/cpp-tutorial/132-function-template-instances/

// passing all parameters by references
template <typename T1, typename T2>
const T2& add_two_objects(const T1& x,const T2& y) {
        return x+y;
};

int main() {
    using std::cout;
    int x(0),y(0);
    std::cout << "Please enter number 1" << std::endl;
    std::cin >> x;
    std::cout << "Please enter number 2" << std::endl;
    std::cin >> y;
    cout<< "sum of two integers is " << add_two_objects(x,y+1.2)    << '\n';
    cout<< "sum of two double is " << add_two_objects(x,y+2.52424324) << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序编译得很好,但在运行时,我总是遇到分段错误.但是,如果我将模板更改为按值传递,则一切正常. …

c++ reference temporary-objects

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

在此初始化中创建了多少个临时对象?

我有这个初始化:

const char* str = std::string("a").c_str();
Run Code Online (Sandbox Code Playgroud)

在此初始化中创建了多少个临时对象?

可以"a"算是临时的。宾语?

我知道std::string("a")是临时的。宾语。

的结果c_str()是一个对象,str将其存储。所以这不是临时的。对象,对不对?

c++ temporary-objects

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

如何理解“临时对象在评估完整表达式的最后一步时被销毁”?有人可以通过一些简单的例子清楚地说明这一点吗?

根据文档(),其中说:

当实现引入具有重要构造函数([class.default.ctor]、[class.copy.ctor])的类的临时对象时,它应确保为临时对象调用构造函数。类似地,应使用非平凡的析构函数([class.dtor])来调用临时析构函数。临时对象在评估完整表达式 ([intro.execution]) 的最后一步被销毁,该完整表达式(在词法上)包含创建它们的点。即使该评估最终引发异常也是如此。销毁临时对象的值计算和副作用仅与完整表达式相关联,而不与任何特定的子表达式相关联。

如何理解“临时对象被销毁作为评估完整表达式([intro.execution])的最后一步,该完整表达式(从词法上)包含它们被创建的点。”?任何人都可以通过一些简单的例子说清楚吗?

c++ temporary-objects

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

通过 const&amp;、&amp;&amp; 或仅通过值获取返回值哪个更好?

#include <vector>

std::vector<int> f()
{
    return std::vector<int>(1024);
}

void use_1(std::vector<int> const&)
{}

void use_2(std::vector<int> const&)
{}

int main()
{
    {
        auto const& v = f(); // style 1
        use_1(v);
        use_2(v);
    }

    {
        auto&& v = f(); // style 2
        use_1(v);
        use_2(v);
    }

    {
        auto v = f(); // style 3
        use_1(v);
        use_2(v);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个更好?样式 1样式 2样式 3

在我看来,如果返回类型没有实现移动语义,那么样式 1样式 2样式 3更有效。

c++ performance lifetime temporary-objects c++11

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

临时在访问()调用中?

我有一个关于在使用时返回对本地对象的引用的编译警告visit(),但我无法理解为什么......

我使用以下代码(有点做作,但这是出于演示目的):

#include <iostream>

template <class... Ts> struct overloaded : Ts... {
  using Ts::operator()...;
};

template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;


using namespace std;


class B {
public:
  B(int i) :
    i_(i) {}

  int get_i() const {
    return i_;
  }

private:
  int i_;
};

class D: public B {
public:
  D(int i) :
    B(i) {}
};

const B& as_base(const variant<B, D>& op) {
    return visit(overloaded {
        [](const B& b) { return static_cast<const B&>(b); },
        [](const D& d) { …
Run Code Online (Sandbox Code Playgroud)

c++ visitors temporary-objects

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

如何在Java中的临时数组中存储句子?

目前,我正在从文本文件中删除一大块数据(段落/字符串)并将其写入新文件.但是,我计划稍后添加一些条件,因此希望能够取出这一块数据并仅将其存储在临时数组中,然后在满足条件时写出文件.但是,我不知道如何在不知道数组大小的情况下将其写入数组.

有没有人有任何想法?

java arrays string temporary-files temporary-objects

0
推荐指数
1
解决办法
4387
查看次数

const 引用会延长临时对象返回的临时对象的寿命吗?

我知道 const 引用会延长本地临时文件的寿命。现在我问自己是否可以在临时对象链上扩展此属性,也就是说,我是否可以安全地定义:

std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)

我的感觉是,由于第一个方法aBar.getTemporaryObject1()已经返回了一个临时对象,因此不适用于aBar.getTemporaryObject2().

c++ lifetime rvalue temporary-objects reference-binding

0
推荐指数
1
解决办法
620
查看次数

对临时对象的解除引用运算符

在这样的代码中

#include <iostream>
#include <memory>

struct A {
    int i;

    A() {
        std::cout << "A()" << std::endl;
    }

    ~A() {
        std::cout << "~A()" << std::endl;
    }
};

void f(const A& a) {
    std::cout << "f(A)" << std::endl;
}

std::unique_ptr<A> make_a() {
    return std::make_unique<A>();
}

int main() {
    f(*make_a());
}
Run Code Online (Sandbox Code Playgroud)

是否可以保证A仅在f()执行对象后删除该对象?

c++ destructor temporary-objects full-expression

0
推荐指数
2
解决办法
108
查看次数