小编Don*_*lei的帖子

哪个函数用于初始化静态类成员?

我有一个关于选择哪个函数来初始化静态类成员的问题.

//Base.h

class Base
{
private:
    static int count;
    static int countInit()
    {
        return 10;
    }
public:
    Base()
    {
    }
};

//and Base.cpp
static int countInit()
{
    return 0;
}
int Base::count=countInit();//member function is used.
static int local_count=countInit();//the local one in Base.cpp
Run Code Online (Sandbox Code Playgroud)

变量Base::count初始化为Base::countInit()而不是countInit()Base.cpp中定义的变量.但是local_count由当地人初始化countInit.所以,我想知道,在这种情况下是否有像Koenig查找这样的规则?

c++ static-members argument-dependent-lookup

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

一种通过'new'实现赋值的方法

有三种方法可以使用关键字'new'.首先是正常的方式.假设学生是一个班级.

Student *pStu=new Student("Name",age);
Run Code Online (Sandbox Code Playgroud)

第二种方式.只调用内存空间而不调用构造函数.

Student *pArea=(Student*)operator new(sizeof(student));//
Run Code Online (Sandbox Code Playgroud)

第三种方式称为"放置新".只调用构造函数来初始化meomory空间.

new (pArea)Student("Name",age);
Run Code Online (Sandbox Code Playgroud)

所以,我在下面写了一些代码.

class Student
{
private:
    std::string _name;
    int _age;
public:
    Student(std::string name, int age):_name(name), _age(age)
    {
        std::cout<<"in constructor!"<<std::endl;
    }
    ~Student()
    {
        std::cout<<"in destructor!"<<std::endl;
    }
    Student & assign(const Student &stu)
    {
        if(this!=&stu)
        {
            //here! Is it a good way to implement the assignment?
            this->~Student();

            new (this)Student(stu._name,stu._age);

        }
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码适用于gcc.但是我不确定它是否会导致错误,或者明确地调用析构函数是危险的.打电话给你一些建议?

c++ new-operator assignment-operator

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

关于序列点和UB

这是一个我无法解释清楚的问题.


哪个选项错了,为什么?

(A) a += (a++);   
(B) a += (++a);
(C) (a++) += a;
(D) (++a) += (a++);
Run Code Online (Sandbox Code Playgroud)

A和之间有什么区别B

我的理解: A是UB但是B可以,因为副作用++a将在作业之前完成.是对的吗?

更新:序列点之间++a和之间有什么区别a++?预增量(减量)的副作用可以在下一个seq点之前的任何时间完成,就像后增量(减量)一样?

c undefined-behavior

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