你能猜出这个简单程序的输出吗?
嗯,我做不到,这让我浪费了一整天的“研究”时间,最后才从一些复杂的实际代码中提取出来(到处都是类型别名,非POD成员的匿名联合体和手动编排的构造函数/析构函数等,只为了那种感觉)。
而且... 我还是看不懂发生了什么! 有人可以给个小提示吗?(希望只是一个盲点。我已经不再专业地使用C++了。)
注意:使用(最新的)MSVC
(请原谅我尽量不透露太多细节,以免剧透——毕竟,这本来就是显而易见的,对吗?只是对我来说完全相反……)
#include <vector>
#include <string>
#include <exception>
#include <iostream>
int main()
{
try {
struct X {
explicit X(int) {}
X(std::string) {} // Just to confuse you more...
};
std::vector<X>{"a", "b"};
} catch (std::exception& x) {
std::cerr << x.what();
}
}
嗯,我做不到,这让我浪费了一整天的“研究”时间,最后才从一些复杂的实际代码中提取出来(到处都是类型别名,非POD成员的匿名联合体和手动编排的构造函数/析构函数等,只为了那种感觉)。
而且... 我还是看不懂发生了什么! 有人可以给个小提示吗?(希望只是一个盲点。我已经不再专业地使用C++了。)
注意:使用(最新的)MSVC
/W4
和 GCC -Wall
进行干净的编译*;两者输出相同(语义上)。
* 即使没有“迷惑读者”的那一行。我觉得我会做噩梦。
(请原谅我尽量不透露太多细节,以免剧透——毕竟,这本来就是显而易见的,对吗?只是对我来说完全相反……)
vector<X>{"a", "b", "c"};
以理解问题。将其更改为vector<X>{X{"a"}, X{"b"}};
以修复问题。 - Eljayvector
构造函数中。 - user4581301stl
标签指的是标准模板库(Standard Template Library),这是一个非常有影响力的库,它在1998年形成了C++标准库的思想基础(以及一些初始实现)。很可能您今天并没有使用STL,因此删除该标签是合理的。std
可能更合适,但可能仍然过于宽泛,因为这涉及到std库容器。不确定是否有相应的标签。 - user4581301