#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
uint32_t func() { return rand() % 10; }
struct A {
uint32_t _x, _y, _z;
A(uint32_t x, uint32_t y, uint32_t z) : _x(x), _y(y), _z(z) {}
};
int main() {
A a{func(), func(), func()};
//A a(func(), func(), func());
printf("%d %d %d\n", a._x, a._y, a._z);
return 0;
}
GCC 9.1
和 MSVC 19.22.27905
在使用花括号或括号时打印的顺序不同。Clang 8.0.0
对两种情况都会打印相同的顺序。
我在标准中找不到关于此事的说明,它是在标准中规定的还是由编译器决定输入参数的计算顺序?
f(std::unique_ptr<T>(new T),std::unique_ptr<T>(new T))
如果其中一个对象构造失败,则可能会泄漏另一个对象。 - Davis Herring