如何防止编译器在类构造函数参数中进行隐式类型转换?

时间:2009-10-31 11:45:53

标签: c++

#include <iostream>
using namespace std;
struct testarray{
    int element;
public:
    testarray(int a):element(a){}
};
class myarray 
{ 
public:
    testarray i; 

    public: 
            myarray(testarray a) : i(a){ } 


} ;
int main()
{
    myarray objArray[3] = {1,2,3};

    return 0;
}

以上代码在Visual C ++ 2005 Express Edition IDE中编译良好。但我想要的是防止编译器隐式地类型化对象类型。

4 个答案:

答案 0 :(得分:9)

explicit构造函数使用关键字testarray,以便编译器不执行隐式转换。基本上你需要把构造函数编写为:

explicit testarray(int a):element(a){}

答案 1 :(得分:4)

您可以使用explicit关键字作为结构构造函数。

答案 2 :(得分:1)

是的,请使用上述关键字“explicit”。 关于你提供的来源的另一个建议:为什么你在结构中有“公共”?默认情况下,所有struct的成员都是公共的。如果你想使用不同的访问修饰符(例如,几个“私人”成员或方法)使用smth,你最好使用类。

答案 3 :(得分:0)

也许您希望构造函数为explicit

http://www.cppreference.com/wiki/keywords/explicit