我试图用变量初始化一个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
答案 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