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的类型,所以显然您应该更改它。你到底想干什么?对不起,那是个错误。我刚刚编辑了它。