C++ c+中的对象声明和定义+;

C++ c+中的对象声明和定义+;,c++,syntax,dynamic-allocation,new-operator,C++,Syntax,Dynamic Allocation,New Operator,可能重复: 我看到有人这样使用构造函数: class Foo { public: Foo(); }; int main(){ Foo *f= new Foo; } Foo*f=newfoo和Foo*f=newfoo()?这两种初始化形式之间没有差异。两者都将调用默认构造函数,因为构造函数是public这两种初始化形式之间没有差异。两者都将调用默认构造函数,因为构造函数是publicỲ我们的示例甚至可能无法编译,您需要声明一个指针 Foo *f = new Foo; 键入new

可能重复:

我看到有人这样使用构造函数:

class Foo
{
  public: Foo();
};

int main(){
  Foo *f= new Foo;
}

Foo*f=newfoo
Foo*f=newfoo()

这两种初始化形式之间没有差异。两者都将调用默认构造函数,因为构造函数是
public

这两种初始化形式之间没有差异。两者都将调用默认构造函数,因为构造函数是
public

Ỳ我们的示例甚至可能无法编译,您需要声明一个指针

 Foo *f = new Foo;

键入
new Foo
new Foo()
没有区别,因为两者都不带参数运行构造函数。

Ỳ我们的示例甚至可能无法编译,您需要声明一个指针

 Foo *f = new Foo;

键入
new Foo
new Foo()
没有区别,因为两者都在不带参数的情况下运行构造函数。

首先,您给出的代码不会编译。你需要有

Foo*f=newfoo()

注意星号

否则,这两个调用对于非基元类型具有相同的结果。我曾在styleguide强制使用()语法的公司工作过,这有一个很好的理由:对于基本类型,可能会有区别:

int* p = new p;
cout << *p << endl; // the value is arbitrary i.e. behavior is undefined.
int* q = new int();
cout << *q << endl; // outputs 0.
int*p=新的p;

cout首先,您提供的代码不会编译。你需要有

Foo*f=newfoo()

注意星号

否则,这两个调用对于非基元类型具有相同的结果。我曾在styleguide强制使用()语法的公司工作过,这有一个很好的理由:对于基本类型,可能会有区别:

int* p = new p;
cout << *p << endl; // the value is arbitrary i.e. behavior is undefined.
int* q = new int();
cout << *q << endl; // outputs 0.
int*p=新的p;

这真的是C++吗?两个都不会编译(都返回代码> fo*< /COD>)。@ KennyTM,编辑了删除错误的帖子。这真的是C++吗?两者都不会编译(都返回
Foo*
)。@KennyTM在删除编译错误的情况下编辑了这篇文章。内置版本有区别。@sbi:我不是说内置版本。也许我应该更详细一点。@iammilind:粗体文本如何显著更好?@sehe,粗体文本将简要给出答案的核心。有进一步兴趣的人可以详细阅读。没什么:)@Donotalo:是的,我想这会有帮助。内置有区别。@sbi:我不是说内置。也许我应该更详细一点。@iammilind:粗体文本如何显著更好?@sehe,粗体文本将简要给出答案的核心。有进一步兴趣的人可以详细阅读。没什么:)@Donotalo:是的,我想这会有帮助。