C++ 在初始化列表中使用增量后运算符
我可以将后增量运算符与初始化列表参数一起使用吗?例如,类似这样的事情:C++ 在初始化列表中使用增量后运算符,c++,constructor,initializer-list,post-increment,C++,Constructor,Initializer List,Post Increment,我可以将后增量运算符与初始化列表参数一起使用吗?例如,类似这样的事情: template <class T> struct MyClass { MyClass(T& val): myvar(val++) {/*body*/} protected: T myvar; }; 模板结构MyClass { MyClass(T&val):myvar(val++){/*body*/} 受保护:T myvar; }; 构造函数主体中的代码会受到更改的影响吗 是的,你可以。myv
template <class T> struct MyClass
{
MyClass(T& val): myvar(val++) {/*body*/}
protected: T myvar;
};
模板结构MyClass
{
MyClass(T&val):myvar(val++){/*body*/}
受保护:T myvar;
};
构造函数主体中的代码会受到更改的影响吗 是的,你可以。
myvar
成员在增量之前的值为val
我们应该考虑val将有一个支持后增量运算符的类型
template <class T> struct MyClass
{
MyClass(T val): myvar(val++) {/*body*/}
// ^
protected:
T myvar;
};
MyClass<int> foo( 1 );
// Here myvar will have the value 1
模板结构MyClass
{
MyClass(T val):myvar(val++){/*body*/}
// ^
受保护的:
T-myvar;
};
MyClass foo(1);
//这里myvar的值为1
不要忘记传递给
MyClass
构造函数的val
的类型。val的类型是什么,是通过引用还是通过值传递的?为什么要这样做?我应该更改函数,使其通过引用获取变量val
,对吗?我想我弄错了。好吧,你的编译器会告诉你的。MyClass(val)不会编译,因为缺少val的类型,所以显然您应该更改它。你到底想干什么?对不起,那是个错误。我刚刚编辑了它。