我开始和班级的朋友一起工作.这里我有两个函数叫做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'未在此范围内声明
这可能看起来很傻,但我是初学者.谢谢!
我有一个std::vector对象,我重载了<运算符.
我如何使用std::sort降序排序(无需编写我自己的Comparator)?
请参阅以下代码:
std::vector<int> v1{1, 2, 3};
std::vector<int> v2 = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
我的问题是:
这两者有区别吗?我知道第一个必须是列表初始化,但第二个怎么样?
因为第二个有一个赋值符号,所以我认为编译器会首先使用它std::initializer_list来创建一个临时符号vector,然后使用复制构造函数将temp复制vector到v2.这是事实吗?
c++ initialization initializer-list c++11 list-initialization
我很难弄清楚如何从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给出了相同类型的行为,但我无法弄清楚如何让它工作.
使用右值引用时,可能会省略许多冗余副本,但这似乎要求我多次写入相同的函数(一个用于右值引用,一个用于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)是一个编译错误,因为我无法隐式转换int为int&&.但我为什么std::make_tuple会工作感到困惑.该参考文献表明它只接受右值参考参数.当传入它的值是ravlue引用时,它似乎也不会复制,但是当我在上面的示例中使用它时,它会复制(正如大多数人所期望的那样).
我foo该怎么做这样的工作?
考虑这段代码
string str;
cout << str[0] << str.size();
Run Code Online (Sandbox Code Playgroud)
而我得到的是不是一个运行时错误,但是" 0",一个0下面的空间.为什么这可能?
我的印象是,通过声明返回类型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) 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++ 代码。
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()
如果我有代码:
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 类型,我什么也得不到(或“”)。
我很好奇它是如何(以及为什么)发生在引擎盖下的。它如何处理返回任何类型的值而不退出程序或需要尝试/捕获?