1

如何在下面的代码中对对象进行显式初始化...

#include"iostream"
using namespace std;

class per{
    char *name;
    int a;
public:
    per(int x = 0,char *str = 0):a(x),name(str){}

    char* get()
    {
        return name;
    }
};
int main()
{

    per obj(100,"test"); // works fine
    // now if i want a explicit initialization for above how will i do?
    // example -- per obj = (100,"test");
    // but i am getting error or may be not aware how to use
    return 0;
}
4

3 回答 3

3

怎么样

per obj = per(100,"test");

这些术语是直接复制初始化

您的初始化也是明确的。

于 2013-02-20T18:38:19.467 回答
1

让我们讨论一下注释代码中的实际问题是什么,即per obj = (100,"test");. 这不会被初始化,因为首先对语句进行评估100,(我的意思是逗号运算符),然后进行初始化。

所以现在作业per obj = (100,"test");看起来像per obj = "test";. 这会导致编译错误,因为预期的第一个参数int不是 a char *。你应该很幸运能把这个天窗问题当作编译问题。只需更改构造函数中的初始化顺序,这就会消失..导致一个重大错误被忽视。基本上,在这种情况下,您所期望的以及编译器如何处理语句是不同的。

于 2013-02-21T04:41:34.073 回答
0

如果你的编译器支持 C++11,你可以这样做:

per obj = { 100, "test" };
于 2013-02-20T19:03:37.553 回答