C++ C++;创建没有参数的对象的语法

C++ C++;创建没有参数的对象的语法,c++,syntax,instance,C++,Syntax,Instance,这个问题可能有点奇怪,我在网上找不到任何关于这个问题的信息。这主要是关于C++语法的。 假设我有以下结构 struct foo { void someMethod(); }; 现在我们可以创建这个结构的一个实例并使用它的方法 foo().someMethod(); // Works fine - Create instance on stack and called its method foo* p = new foo(); // Works fine - p points t

这个问题可能有点奇怪,我在网上找不到任何关于这个问题的信息。这主要是关于C++语法的。 假设我有以下结构

struct foo
{
 void someMethod();
};
现在我们可以创建这个结构的一个实例并使用它的方法

foo().someMethod();       // Works fine - Create instance on stack and called its method
foo* p = new foo(); // Works fine - p points to object on the heap
现在我的问题是——我在一些地方看到了以下情况

foo* p = new foo; //Not new foo(); // Its missing `()` at the end;
那么,对于不需要构造函数中的参数的对象,用以下两种方法声明foo有什么区别呢

foo(); and foo;
如果两者没有区别,为什么我们不能这样做

foo.someMethod();

这只是一个我很好奇的问题。

有一些细微的区别,请参见

可能重复的You can't do
foo.someMethod()
因为
foo
是一个类的名称,而
操作符需要在左边有一个对象(即该类的实例)。但是,
new
表达式需要一个类的名称,可以选择初始值设定项或构造参数。
new foo()
的含义在C++98和C++03之间发生了变化,因此我非常小心在自己的代码中使用它;如果零初始化很重要,那么我添加一个构造函数。