小编mys*_*chu的帖子

在使用转换构造函数编译代码时,为什么需要const复制构造函数?

啊,我有这样的课:

class A {
public:
    A(int *object) {
        std::cout << "convert";
    }

    A(A &object) {
        std::cout << "copy";
    }
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

A a = new int;
Run Code Online (Sandbox Code Playgroud)

然后,当我试图编译它时,我得到了

从'A'类型的右值开始无效初始化类型'A&'的非const引用

但是当我像这样向复制构造函数添加const时:

A(const A &object) {
    std::cout << "copy";
}
Run Code Online (Sandbox Code Playgroud)

代码编译和"转换"被调用.它也适用于我删除复制构造函数.为什么会这样呢?我虽然这个例子与复制构造函数无关,因为我们不使用类A的实例来创建另一个.

c++

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

puts()如何在没有\ 0终止符的情况下找到数组的结尾?

在这段代码中:

int length = atoi(argv[1]);
char *tab = malloc(length * sizeof(char));
memset(tab, '-', length);
puts(tab);
Run Code Online (Sandbox Code Playgroud)

无论我传递什么价值argv[1],输出都是正确的.例如,argv[1] = "5"我得到-----(五个连字符).

我想知道puts()当我没有在我的数组的末尾放置'\ 0'时如何找到输入字符串的结尾char.

c arrays string memory-management dynamic-memory-allocation

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

模糊函数声明

我有这样的代码:

int fun(int());
Run Code Online (Sandbox Code Playgroud)

它到底是做什么的?据我所知,它相当于函数的声明,指向函数

int fun(int (*ptr)())
Run Code Online (Sandbox Code Playgroud)

但我不确定为什么.

c++

0
推荐指数
1
解决办法
62
查看次数