小编Cas*_*let的帖子

何时在cpp中调用复制构造函数?

#include<iostream>
#include<vector>
#include<list>
#include<queue>
#include<map>
using namespace std;
class dog{
    public:
        string name;
        dog();
        dog(const dog & d);
        void barkname(){
            cout<<"bark "<<name<<endl;
        }
        virtual ~dog(){
            //cout<<"delete dog "<<name<<endl;
        }
};

dog::dog(){
    cout<<"blank dog"<<endl;
    this->name="blank";
}

dog::dog(const dog &d){
    cout<<"copy dog"<< " "+d.name<<endl;
    string temp=d.name;
    this->name=temp+" copied";
}


int main(){
    dog d;
    d.name="d";
    dog dd;
    dd.name="dd";
    dog ddd;
    ddd.name="ddd";
    vector<dog> doglist;
    doglist.push_back(d);
    doglist.push_back(dd);
    doglist.push_back(ddd);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

你好,我是cpp的新手.我试图在我的班级狗中使用复制构造函数.我使用push_back三次将三只狗推入载体.所以我期望复制构造函数被调用三次.但是,执行代码后,我发现复制构造函数被调用了六次,结果如下:

blank dog
blank dog
blank dog
copy dog d
copy dog dd
copy …
Run Code Online (Sandbox Code Playgroud)

c++ vector capacity

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

C++不能将变量声明为抽象类型

我正在使用C++模板,我得到了上面的错误.

我的代码如下:

#include <iostream>
#include <string>
using namespace std;
enum type{ONE,TWO,THREE,FOUR,FIVE};

class base{
public:
    virtual void baseOut()const =0;
};
template<class T>
class derived:public base{
    virtual void drivedOut()const=0;
};

template<class T,type>
class derived2:public derived<T>{
    public:
    void baseOut(){}
    void drivedOut(){}

};

int main(){
    derived2<string,ONE> d;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,由于我已经在类模板drived2中覆盖了纯虚函数,为什么drived2仍然是一个抽象类?如何删除此错误.

谢谢:)

c++

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

C++ 中 typedef 中的三个元素是什么意思?

我从 c++ 入门知道我们可以通过以下方式使用 typedef:

typedef int mytype;
typedef int *mytype;
Run Code Online (Sandbox Code Playgroud)

不过下面的代码也编译通过了,好像新建了一个“rt”类型,我很好奇rt的类型是什么,这种typedef的常见用途是什么?

class A{
public:
    int c;
};
typedef int A::* rt;
Run Code Online (Sandbox Code Playgroud)

c++

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

如何在使用pthread_create时传递参数

我想创建三个线程并将一个整数传递给这些线程中的每一个.我使用了pthread_create,我的代码如下.

#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
#define NUM_OF_JOB 3

void* doJob(void* arg){
    int i = *((int*)arg);
    printf("%d\n",i);
}

void init_job() {
    pthread_t thread[NUM_OF_JOB];
    int index[NUM_OF_JOB]={-1,-1,-1};
    for(int i=0;i<NUM_OF_JOB;i++){
    pthread_create(&thread[i],NULL,doJob,(void*)(&index[i]));
    }
}

int main(){
    init_job();
    sleep(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我打算将-1传递给每个线程,但在运行服务器代码的代码之后,我发现它没有打印三个-1.相反,他们可以产生奇怪的输出.那为什么呢?

类似的代码可以 在pthread_create函数的pass参数中 找到我在他的代码和我的代码之间找不到任何不同的东西.但是在他的代码中,线程可以获得预期的参数.

非常感谢你:)

顺便说一句,我尝试从上面的链接稍微更改代码,并运行它.令人惊讶的是,我的mordified版本也没有产生预期的结果.(我认为每个线程应该得到自己的唯一整数作为参数)这是我的mordified码.有人可以解释一下吗?

#include <stdio.h>
#include <pthread.h>

#define THREAD_NUM 10

void *thread_func(void *arg)
{
    int v = *(int*)arg;

    printf("v = %d\n", v);

    return (void*)0;
}

int main(int argc, const char *argv[])
{
    pthread_t pids[THREAD_NUM];
    int rv;
    int i;

    for (i = 0; …
Run Code Online (Sandbox Code Playgroud)

c multithreading

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

为什么动态类型在C++运行时才知道?

我已经阅读了1347691等其他问题,并知道动态和静态类型是什么.

但是,我很好奇为什么直到运行时才知道动态类型.毕竟,我们人类可以通过查看代码来决定动态类型.为什么编译器不能这样做?

实际上我们可以typeid用来决定所谓的运行时类型.编程/ RTTI.

那么为什么在"C++ primer 5th"一书中,作者仍然说

直到运行时才知道动态类型

c++ rtti

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

如何查找文本文件的特定行并对其进行操作?

我有几个.c文件,我想找到行printf,对于那些行,我想//在它们之前添加注释掉代码.我可以使用python读取每个文件,进行转换,并将转换后的文本写回来,但它太复杂了.还有其他简单的方法吗?我考虑过sedawk,但我不知道如何编写表达式,或者是否可以使用sed/ 来完成此任务awk.

bash awk sed

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

标签 统计

c++ ×4

awk ×1

bash ×1

c ×1

capacity ×1

multithreading ×1

rtti ×1

sed ×1

vector ×1