c++ - 在初始化列表中使用后递增运算符

标签 c++ constructor initializer-list post-increment

我可以使用带初始化列表参数的后递增运算符吗?例如这样的事情:

template <class T> struct MyClass
{
  MyClass(T& val): myvar(val++) {/*body*/}
  protected: 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 构造函数的 val 的类型。

关于c++ - 在初始化列表中使用后递增运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682061/

相关文章:

c++ - 将 Variadic 模板包转换为 std::initializer_list

c++ - 如何修复 "array rvalue"无法使用 gcc-4.8 和 clang-3.7 进行编译的问题?

c++ - 向虚拟方法添加默认参数

c++ - 模板化单例类 - 如何处理私有(private)构造函数

java - 构造函数与 Java 中的普通方法有何不同?

java - 将构造函数参数传递给 JAVA 方法

c++ - 为什么用 A{8} 初始化的对象不能作为参数传递?

c++ - 在 C++ 中的二维数组中设置值

c++ - 这在 MSDN 文档中是错误的吗?

c++ - std::disjunction 中的短路模板特化