c++ - C++ 中带指针参数的函数

标签 c++ function pointers constructor ampersand

我在理解指针函数的某些方面时遇到了一些困难。这是我正在运行的代码:

#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 类的构造函数需要一个指针,但我将一个对象传递给它,而不是指向该对象的指针。如果我实际上通过使用传递指针,代码也可以工作:

Item i2(&i1);

那么,& 符号是可选的吗?编译器是否认识到我要传递一个指针而不是实际对象并自行处理它?我预计在这种情况下会出现编译错误。如果我的代码在不应该工作的时候工作,我会感到非常沮丧:-)

最佳答案

Item i2(i1);

这是有效的,因为它不是调用你的用户定义的构造函数,它接受一个指针,而是调用隐式生成的具有签名的复制构造函数:

Item (const Item &);

如果你不想让它生效,你可以删除它(需要C++11):

Item (const Item &) = delete;

如果您的编译器不支持 C++11,您可以将其声明为私有(private)。

关于c++ - C++ 中带指针参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912476/

相关文章:

c++ - Google 测试 - 构造函数声明错误

c++ -::myFunction() 是否属于全局命名空间?

识别列表或数组中的数字是否更接近 0 或 1 的 Python 函数

c - 如何防止从 C 保存的文件末尾出现额外的空格?

c++ - 如何调用作为参数给出的 C++ 类方法?

C语言 : How is swapping pointers different from swapping the value pointed to?

c++ - 如何在 QT GUI 应用程序中进行正确的线程处理?

c++ - 常量和指针

c - C 中从用户读取所有数组成员的函数

c++ - 来自普通函数的虚函数调用