我有一个关于编译器/语言行为的问题,我期望其行为有所不同。 为什么下面的代码会被编译?构造函数中具有空std :: vector的意外编译器行为
#include <vector>
class A { };
int main() {
A a(std::vector<int>());
}
它不能用std::vector<int>(0)
或其他值编译。不过,如果您给std::vector<int>(*)
一个指针,它会进行编译。它也适用于除“int
”之外的其他类型。我希望代码根本不起作用。有人可以向我解释发生了什么?
这里是剪断上cpp.sh参考代码:http://cpp.sh/4l3a
我用gcc版本4.8.4。
因为它_does_编译,你应该假设它应该,而且我们不能猜测你为什么认为它不应该。 _你有什么期望?_ –
抱歉,重复的答案。 @LightnessRacesinOrbit在他的回答中正确地承担了我的期望。 – Squolly