Avatar ·

new操作符中类型名后的括号是否影响初始化?

大家好!我开始学习C++,遇到了一个不太明白的地方。当我们通过`new`分配内存时,我经常看到两种写法: ```cpp int* p1 = new int; // 无括号 int* p2 = new int(); // 有括号 ``` 或者对于类: ```cpp MyClass* obj1 = new MyClass; MyClass* obj2 = new MyClass(); ``` 看起来没有区别,但我听说对于内置类型(int、double等),括号可能会影响初始化。我用一个简单例子验证了一下: ```cpp #include int main() { int* a = new int; int* b = new int(); std::cout << *a << " " << *b; // 有时输出垃圾值和0 delete a; delete b; return 0; } ``` 确实,`*a`显示奇怪的值,而`*b`总是0。为什么会这样?对于类来说,这也重要吗?请解释一下带括号和不带括号时`new`的初始化是如何工作的。另外,如果写成`new int(42)`,这显然是显式指定值,对吧?提前谢谢!