具有两个整数列表的structinit减少为一个int

时间:2016-11-29 19:51:59

标签: c++

我试图用变量初始化一个struct。但是如果我使用类型名称=(值...),它只使用最后一个元素进行初始化。它看起来不适合我,但我不知道它的未定义行为,编译器错误或其他东西。我会除了错误消息或更多元素的初始化。

代码:

struct funct {
    funct(int i)
    {
        std::cout << "init with one\t" << i << std::endl;
    }
    funct(int i, int j)
    {
        std::cout << "init with two\t" << i << "\t" << j << std::endl;
    }
};

int main() {
    funct tempa = funct(42);
    funct tempb = 43;
    funct tempc = funct(44, 45);
    funct tempd = (46, 47); // thats the compiling thing
    return 0;
}

输出:

init with one   42
init with one   43
init with two   44      45
init with one   47

为什么会这样,而不是使用2或compileerrormessage初始化?

编译器:g ++(GCC)5.3.0

1 个答案:

答案 0 :(得分:2)

像Ben说的那样,它是导致问题的逗号运算符。

http://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator

  

在逗号表达式E1,E2中,评估表达式E1,丢弃其结果,并在评估表达式E2开始之前完成其副作用

通过a = (b,c)您有效地设置a = c并放弃b