对象的显式声明

Explicit Declaration for an object

本文关键字:声明 对象      更新时间:2023-10-16

如何对下面代码中的对象进行显式初始化。。。

#include"iostream"
using namespace std;
class per{
    char *name;
    int a;
public:
    per(int x = 0,char *str = 0):a(x),name(str){}
    char* get()
    {
        return name;
    }
};
int main()
{
    per obj(100,"test"); // works fine
    // now if i want a explicit initialization for above how will i do?
    // example -- per obj = (100,"test");
    // but i am getting error or may be not aware how to use
    return 0;
}

怎么样

per obj = per(100,"test");

术语是直接复制初始化

您的初始化也是显式的。

让我们讨论注释代码中的实际问题,即per obj = (100,"test");。这不会被初始化,因为首先为100,(我的意思是逗号运算符)计算语句,然后进行初始化。

所以现在分配CCD_ 3将看起来是CCD_。这导致编译错误,因为期望的第一个参数是int而不是char *。你应该很幸运,把这个凿沉问题作为编译问题。只要更改构造函数中初始化的顺序,这将消失。。导致一个重大错误未被注意到。基本上,在这种情况下,您期望的内容和编译器处理语句的方式是不同的。

如果您的编译器支持C++11,您可以执行:

per obj = { 100, "test" };