小编son*_*yao的帖子

如何在成员函数#2中访问成员函数#1中的变量?

我开始和班级的朋友一起工作.这里我有两个函数叫做setMaxSickDays和getMaxSickDays.我在setMaxSickDays中创建了一个名为maxSickDays的变量,我想从getMaxSickDays访问它.

class timeOff
{
public:
    void setMaxSickDays(numDays &friendlyObject) {  
        int maxSickDays;                         
        friendlyObject.hours = 240;
        maxSickDays = friendlyObject.hours;
    }

    void getMaxSickDays(numDays &friendlyObject) {
        cout << maxSickDays;
    }
};
Run Code Online (Sandbox Code Playgroud)

错误:'maxSickDays'未在此范围内声明

这可能看起来很傻,但我是初学者.谢谢!

c++ class object friend

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

std :: sort降序与运算符重载

我有一个std::vector对象,我重载了<运算符.

我如何使用std::sort降序排序(无需编写我自己的Comparator)?

c++ sorting std c++11

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

列表初始化的形式

请参阅以下代码:

std::vector<int> v1{1, 2, 3};
std::vector<int> v2 = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这两者有区别吗?我知道第一个必须是列表初始化,但第二个怎么样?

  2. 因为第二个有一个赋值符号,所以我认为编译器会首先使用它std::initializer_list来创建一个临时符号vector,然后使用复制构造函数将temp复制vectorv2.这是事实吗?

c++ initialization initializer-list c++11 list-initialization

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

Const方法返回向量元素的非const引用

我很难弄清楚如何从const类方法返回non-const对元素的引用std::vector.我想要的一个简单例子是,

template<class T>
class MyClass
{
 public:
 MyClass : myVec(3)
 {
 }

 T& x() const
 {
    return *(myVec.data())[0]
 }

 std::vector<T> myVec;
}
Run Code Online (Sandbox Code Playgroud)

我想要的行为是,我希望能够做到以下几点,

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)
Run Code Online (Sandbox Code Playgroud)

Eigen给出了相同类型的行为,但我无法弄清楚如何让它工作.

c++ const reference vector const-method

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

如果可能,C++通过rvalue引用传递参数,否则复制左值引用

使用右值引用时,可能会省略许多冗余副本,但这似乎要求我多次写入相同的函数(一个用于右值引用,一个用于const左值引用).但标准库似乎只需要声明一些函数.

例如:

#include <iostream>
#include <tuple>

void foo(int&& x){
    x = 2;
}

int main()
{
    int x = 1;
    foo(x); // compile error
    std::make_tuple(x); // ok
    std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

调用foo(x)是一个编译错误,因为我无法隐式转换intint&&.但我为什么std::make_tuple会工作感到困惑.该参考文献表明它只接受右值参考参数.当传入它的值是ravlue引用时,它似乎也不会复制,但是当我在上面的示例中使用它时,它会复制(正如大多数人所期望的那样).

foo该怎么做这样的工作?

c++ templates function rvalue-reference c++11

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

为什么即使尚未初始化字符串[0]也有效?

考虑这段代码

string str;
cout << str[0] << str.size();
Run Code Online (Sandbox Code Playgroud)

而我得到的是不是一个运行时错误,但是" 0",一个0下面的空间.为什么这可能?

c++ string language-lawyer c++11

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

当返回类型为const时,为什么可以修改返回值?

我的印象是,通过声明返回类型const,您可以防止修改数据结构.但是,我测试了这个,我可以修改数据结构.这是为什么?

例如,以下代码1 2 3 4 5 6在编译时打印--std=c++11:

#include <iostream>
#include <set>

using namespace std;
const set<int> f(void) {
    set<int> s = {1, 2, 3, 4, 5};
    return s;
}
int main(void) {
    set<int> s = f();
    s.insert(6);

    for (auto elem: s) {
        cout << elem << " ";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ const return-type return-value

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

为什么对象可以"移动"甚至缺少移动构造函数和移动赋值运算符?

http://en.cppreference.com/w/cpp/language/rule_of_three

我几个月前开始使用c ++ 11,并且已经看过五条规则.

所以..我开始在每个具有虚析构函数的类上使用default关键字复制构造函数/复制赋值运算符/移动构造函数/移动赋值运算符.

因为规则告诉我,如果你声明显式析构函数,那么你的类就没有它的隐式移动构造函数和移动赋值运算符了.

所以我认为gcc会向我抱怨由于缺少移动构造函数和移动赋值运算符而导致下面的类.

但它运作良好!发生了什么事??

class Interface {
public:
    virtual ~Interface() = default;  // implicit destructor
};

class ImplA : public Interface {
public:
    virtual ~ImplA() = default; // implicit destructor
};

ImplA first;
ImplA second(first);            // copy constructor, OK. understood it.
ImplA third(std::move(first));  // move constructor, it's OK. Why?
second = first;             // copy assignment, OK. understood it.
second = std::move(first);  // move assignment, it's also OK. Why?
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics c++11

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

C++函数什么时候删除返回值?

我有以下 C++ 代码。

string getName()
{
    return "C++";
}

void printName(const char* name)
{
    cout << name << endl;
}

int main()
{
    printName(getName().c_str());
}
Run Code Online (Sandbox Code Playgroud)

该函数getName返回一个string. 我将函数c_str的指针传递给函数。我想知道在调用函数之前返回的内容是否会被删除。如果不是那么什么时候删除返回值。stringprintNamestringprintName()

c++ string temporary return-value lifetime

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

c++ std::list::front() 返回空列表是什么?

如果我有代码:

struct Test
{
  int x = 10;
};

int main()
{
  std::list<Test> linkedList;
  std::cout << linkedList.front().x << std::endl;
}
---

out -> 0
Run Code Online (Sandbox Code Playgroud)

为什么我的 test.x 值是 0?如果我将列表更改为 int 类型,它返回 0。如果我给它一个 char 类型,我什么也得不到(或“”)。

我很好奇它是如何(以及为什么)发生在引擎盖下的。它如何处理返回任何类型的值而不退出程序或需要尝试/捕获?

c++ null stdlist

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