nrvo

    0热度

    1回答

    我读的书内C++对象模型,我得到了下面的事情: 据我所知,NRVO不会调用拷贝构造函数函数返回的类。所以我不明白为什么“由于没有复制构造函数,程序的第一个版本不适用NRV优化...”。

    7热度

    2回答

    比方说,我们有这种情况 std::string v_1() { return "name"; } std::string test = v_1(); 是RVO应用在这里?我认为答案是否定的,因为应用RVO的规则是:“如果一个函数按值返回一个类的类型,并且return语句的表达式是一个非自动存储持续时间的非易失性对象的名称,函数参数或catch子句参数与具有相同类型(忽略顶级cv

    7热度

    3回答

    一个函数需要返回两个值给调用者。什么是最好的实施方式? 选项1: pair<U,V> myfunc() { ... return make_pair(getU(),getV()); } pair<U,V> mypair = myfunc(); 选项1.1: // Same defn U u; V v; tie(u,v) = myfunc(); 选项2: void myfun

    2热度

    1回答

    自1992年以来,我一直在使用C++(并阅读大量关于该语言的内容),所以我对这门语言有相当的了解,但远不止这些。我的问题是关于C++ 11命名的返回值优化 - 有什么保证它会被执行?我倾向于发送非常量参数(C++ 97样式)或使用shared_ptr(C++ 11样式),甚至使用ptr-to-ptr(C样式)。一个原因是,使用非const引用args或shared_ptr,我保证没有额外的对象副本

    4热度

    2回答

    当我在VS2010中运行此代码时,不应用NRVO。 #include <stdio.h> class A { public: A() { printf("I am in constructor\n"); } A(const A& a) { printf("I am in copy constructor\n"); } ~A() { printf("I

    0热度

    1回答

    class Date { private: int day,month,year; public: Date (int d,int m,int y) { day=d; month=m; year=y; } Date (Date &d) { day=d.day; month=d.month; year=d.year; } int monthDays(int mont

    1热度

    3回答

    我有一个函数,我希望编译器始终使用NRVO ......即使在调试模式下。这是否有一个附注? 这里是我的类,它工作在“释放”模式极大: template <int _cbStack> class CBuffer { public: CBuffer(int cb) : m_p(0) { m_p = (cb > _cbStack) ? (char*)malloc(cb) : m

    3热度

    1回答

    我试图编写一个(C++ 98)程序,其中发生以下模式:我有一个非常简单的通用元组类,并且需要用值填充它使用工厂建造。小例子,代码如下: #include <iostream> class diagnostics { private: int payload; public: diagnostics(int a) : payload(a) {

    6热度

    1回答

    比方说,我有功能 #include <string> std::string const foo() { std::string s = "bar"; return s; } int main() { std::string t = foo(); } 可以执行(命名)返回值优化t,即使类型s和t是从foo返回类型都不同,由于const编译器差异?

    1热度

    2回答

    我已阅读了一些关于移动功能的帖子(例如http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html),并且我想观察移动操作员的行动。所以,我想下面的代码: #include <vector> #include <cassert> #include <functional> #inclu