我注意到int num(5)
和int num = 5
都编译并为num
分配5。
问题
num(5)
为何起作用吗?这种语法看起来像是初始化一个对象请问我这是一个愚蠢的问题。我是C ++的新手,正在学习东西。
答案 0 :(得分:3)
您能帮我理解为什么int num(5)起作用吗?这个语法看起来 就像初始化一个对象
在基本情况下(程序员显式键入int num(5);
或int num = 5;
之类的代码行,看起来有两种不同的语法都可以做相同的事情,这是不必要的,而且是不必要的。
但是,一旦您进入模板,就会发现想要编写一个既可以与用户定义的类同时也可以与内置类型一起使用的模板的情况。例如,这是我前一天写的一个模板,用于保存(然后还原)任意值的状态:
template<class T> class SaveGuard
{
public:
SaveGuard(T & saveMe) : _saveMe(saveMe), _tempHolder(saveMe) {/* empty */} // save the current value
~SaveGuard() {_saveMe = _tempHolder;} // restore the saved value
private:
T & _saveMe;
T _tempHolder;
};
请注意,在这种情况下,_tempHolder(saveMe)
子句在语法上与int(5)
语法相同,并且由于支持int(5)
语法,因此我可以声明SaveGuard<int> guard(blah);
在我的程序中,它将按预期工作。另外,我可以声明一个SaveGuard<MyClassType> guard(blah);
,并且模板也可以使用MyClassType
类的复制构造函数来工作。
两者在速度和材质方面有什么区别 落后了
在您的示例中,速度没有差异;编译器将为两种语法生成相同的汇编代码。