注册 登录
编程论坛 C++教室

which way is standard C++?

HJin 发布于 2007-08-30 06:48, 640 次点击

/*---------------------------------------------------------------------------
File name: stdc++.cpp
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 8/29/2007 15:51:23
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762

Following C++ source code compiles under VC 2005. It won't compile under g++.

Your task is to select the delcarations which are conformant to standard C++.

*/

#include <iostream>
using namespace std;

class A
{
public:
A(int i_=0) : i(i_)
{
}

private:
int i;
};

int main()
{
// which way is standard C++?

A* pA1 = new A; // A
A* pA2 = new A(); // B
A* pA3 = new A[5](); // C
A* pA4 = new A[5]; // D

return 0;
}

[此贴子已经被作者于2007-8-30 6:51:52编辑过]

6 回复
#2
天使梦魔2007-08-30 09:12
ABCD,就现在我想搞的opengl(或者是d3d)都不是标准的了
已经不追求了

[此贴子已经被作者于2007-8-30 9:12:32编辑过]

#3
aipb20072007-08-30 11:45

我想 AD 应该没什么疑问吧。

BC的话,我所了解的有C这样的方式。

在c++里有个值初始化的概念。

比如 vector<TYPE> ivec(10);
如果TYPE是类类型,那么用默认构造函数初始化,如果为内置类型,就用0初始化。这就是值初始化。

在动态分配数组时,可以在 int *pi = new int[n]() 加一个括号,表示值初始化。
显然这只针对内置类型,对于类类型,加不加都采用默认构造函数初始化。

但是我也很迷惑,因为即使这样做了,仍然不能达到初始化为0的目的。但是编译器又支持这样的写法。

这点我是从c++ primer上了解的,所以我想应该是标准c++行为。

#4
HJin2007-08-30 12:01
AD?

Think a little bit more. Or refer to Stroustrup's book.
#5
aipb20072007-08-30 12:13
AD也有点~~~~~~~~因为带参数加默认值的构造函数和默认构造函数毕竟不一样。

那你是怎么想的?

[此贴子已经被作者于2007-8-30 12:17:06编辑过]

#6
HJin2007-08-30 12:53
I voted B and D, although A will be accepted by most compliers.

C is okay for VC, but not for g++.
#7
aipb20072007-08-30 13:02
混淆了。

呵呵,但是要我写肯定不会这样写!尽量避免!
1