C++ 中带指针参数的函数
Functions with pointer arguments in C++
我在理解指针函数的某些方面时遇到了一些困难。这是我的代码 运行:
#include <iostream>
using namespace std;
class Item
{
public:
Item(Item * it)
{
data = it->data;
}
Item(int d)
{
data = d;
}
void printData()
{
cout << data << endl;
}
private:
int data;
};
int main()
{
Item i1(79);
Item i2(i1);
i1.printData();
i2.printData();
}
这段代码有效,问题是我不明白为什么! Item class 的构造函数需要一个指针,但我将一个对象传递给它,而不是指向该对象的指针。如果我实际上通过使用传递指针,代码也有效:
Item i2(&i1);
那么,& 符号是可选的吗?编译器是否认识到我要传递一个指针而不是实际对象并自行处理它?我预计在这种情况下会出现编译错误。如果我的代码在不应该工作的时候工作,我会感到非常沮丧:-)
Item i2(i1);
这是有效的,因为它不是调用你的带指针的用户定义构造函数,而是调用隐式生成的具有签名的复制构造函数:
Item (const Item &);
如果你不想让它生效,你可以删除它(需要C++11):
Item (const Item &) = delete;
如果您的编译器不支持 C++11,您可以将其声明为私有。
如果您不想使用这两个函数,编译器将生成复制构造函数和赋值函数。您需要在 class
的私有范围内声明它
private:
Item(const Item&);
Item& operator=(const Item&);
我在理解指针函数的某些方面时遇到了一些困难。这是我的代码 运行:
#include <iostream>
using namespace std;
class Item
{
public:
Item(Item * it)
{
data = it->data;
}
Item(int d)
{
data = d;
}
void printData()
{
cout << data << endl;
}
private:
int data;
};
int main()
{
Item i1(79);
Item i2(i1);
i1.printData();
i2.printData();
}
这段代码有效,问题是我不明白为什么! Item class 的构造函数需要一个指针,但我将一个对象传递给它,而不是指向该对象的指针。如果我实际上通过使用传递指针,代码也有效:
Item i2(&i1);
那么,& 符号是可选的吗?编译器是否认识到我要传递一个指针而不是实际对象并自行处理它?我预计在这种情况下会出现编译错误。如果我的代码在不应该工作的时候工作,我会感到非常沮丧:-)
Item i2(i1);
这是有效的,因为它不是调用你的带指针的用户定义构造函数,而是调用隐式生成的具有签名的复制构造函数:
Item (const Item &);
如果你不想让它生效,你可以删除它(需要C++11):
Item (const Item &) = delete;
如果您的编译器不支持 C++11,您可以将其声明为私有。
如果您不想使用这两个函数,编译器将生成复制构造函数和赋值函数。您需要在 class
的私有范围内声明它private:
Item(const Item&);
Item& operator=(const Item&);