C++中的对象初始化语法



在尝试初始化构造函数时,我注意到了一些奇怪的错误。如果我只是给他们看,这是最简单的。

#include <iostream>

class MyClass {
public:
    int var1, var2, var3;
    MyClass() {
        var1, var2, var3 = 0;
    }
    MyClass(int one, int two, int three) {
        var1 = one;
        var2 = two;
        var3 = three;
    }
};

int main()
{
    MyClass object1(5, 6, 7);
    std::cout << object1.var1; // This works
    MyClass object2();
    std::cout << object2.var1; //Error object must have class type.
    MyClass object3 = MyClass();
    std::cout << object3.var1; //Now it works for some reason
    delete &object1;
    MyClass ojbect1(5, 6, 7); //error redefinition; multiple initialization
}

正如您所看到的,由于某种原因,当我初始化object2时,值不会打印,除非与object3一样,语法写为MyClass object3=MyClass();

此外,当我删除对象1时,我必须使用&操作人员这让我很惊讶,因为在这个问题中删除C++中的对象时,他们不使用"与"符号。

最后,当我尝试重新初始化myobject时,编译器会抱怨存在多个定义。我试着去掉MyClass关键字,但它仍然不允许。

现在,我当然可以用各种变通方法让程序做我想做的事情,但我不明白为什么这些事情不能用我在这里写的方式来做。

MyClass object2();
std::cout << object2.var1; 

不起作用,因为object2被解析为"一个不带参数并返回MyClass的函数"。看见最令人烦恼的解析:为什么不;t A A(());工作

delete &object1; 

是导致未定义行为的原因。只能delete使用new创建的对象。

MyClass object1(5, 6, 7);

是一个编译器告诉的问题。不能在同一范围内重新声明名称。如果你想让它有一个新的价值,你可以使用:

object1 = MyClass(5, 6, 7);
MyClass myobj2();

它声明了一个名为myobj2的函数,该函数返回一个MyClass

MyClass myobj(5, 6, 7);

导致错误,因为即使之前删除了myobj,它仍然被声明为MyClass类型。删除对象不会取消声明变量。如果你删除它并想重新创建它,请执行以下操作:

myobj = MyClass(5,6,7);

但是,删除本地对象是无稽之谈。你不必删除一个对象,一旦它超出范围,它就会被删除。实际上,您应该只使用通过new创建的delete对象,否则您将有未定义的行为。

相关内容

  • 没有找到相关文章

最新更新