我有以下代码:
#include <iostream>
using namespace std;
void test(int& a) {
cout << "lvalue." << endl;
}
void test(int&& a) {
cout << "rvalue" << endl;
}
int main(int argc, char *argv[]) {
int a = 1;
int&& b = 2;
test(a);
test(1);
test(std::move(a));
test(b);
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
lvalue.
rvalue
lvalue.
lvalue.
Run Code Online (Sandbox Code Playgroud)
std::move()并且int&&是右值参考,我想知道为什么test(std::move(a))和test(b)输出lvalue?它与签名匹配和函数重载有关吗?
我有以下代码片段:
#include <iostream>
using namespace std;
class A {
int* data;
int size;
public:
A(int s):size(s)
{
data = new int[size];
}
A() {
data = nullptr;
}
~A() {
if (data) delete [] data;
}
};
class B {
A a[2];
public:
B() {
a[0] = A(10);
a[1] = A(11);
}
};
int main(int argc, char *argv[]) {
B b;
}
Run Code Online (Sandbox Code Playgroud)
在上面的C++代码中,我有一个类A,它有一个数组成员int* data,并且(de)内存分配由(de)构造函数处理.在我创建B类,其具有阵列的A类固定长度作为一个数据成员的.
我的问题是:如何优雅地初始化会员A …