【发布时间】:2013-05-01 22:22:38
【问题描述】:
vector<T>有一个构造函数,它取向量的大小,据我所知是显式,这可以通过以下代码编译失败来证明 p>
void f(std::vector<int> v);
int main()
{
f(5);
}
我无法理解并要求您解释以下代码编译的原因
std::vector<std::vector<int>> graph(5, 5);
它不仅可以编译,它实际上将图形的大小调整为 5,并将每个元素设置为五个零的向量,即与我通常编写的代码相同:
std::vector<std::vector<int>> graph(5, std::vector<int>(5));
怎么样?为什么?
编译器:MSVC10.0
好的,看来这是一个 MSVC 错误(又一个)。如果有人可以详细说明答案中的错误(即总结复制它的情况),我很乐意接受它
【问题讨论】:
-
这(正确地)不能在 GCC 4.7 上编译。又一个 MSVC++ 非标准的怪事。他们可能只是忘记标记构造函数
explicit,您可以在<vector>中进行检查。 -
@syam:我很高兴它无法在 GCC 上编译,但真正奇怪的是第一个示例在 MSCV 上编译,而另一个没有。这才是真正奇怪的地方
-
@ArmenTsirunyan 在 VS2012 上都不能编译;错误消息指出构造函数是
explicit -
你为什么不看看图书馆资源?
-
@jrok:我做到了——构造函数是显式的,但代码没有被拒绝
标签: c++ visual-studio vector type-conversion explicit-constructor