相关疑难解决方法(0)

从恰好两个字符串文字构造结构向量(使用一些自定义构造函数)会崩溃。为什么?

你能猜出这个简单程序的输出吗?

\n
#include <vector>\n#include <string>\n#include <exception>\n#include <iostream>\n\nint main()\n{\n    try { \n        struct X {\n            explicit X(int) {}\n            X(std::string) {} // Just to confuse you more...\n        };\n        std::vector<X>{"a", "b"};\n    } catch (std::exception& x) {\n        std::cerr << x.what();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

好吧,我不能,这花了我一天的时间“研究”,然后才登陆这里,最终从一些复杂的现实生活代码中提取出来(到处都是类型别名,匿名。与非 POD 成员的联合以及手工 -精心策划的演员/导演等,只是为了营造氛围)。

\n

而且……我还是看不出发生了什么!有人可以给一个温柔的提示吗?(希望只是一个盲点。我不再专业地从事 C++ 工作。)

\n

注意:使用(最新的)MSVC/W4和 GCC进行干净编译* -Wall;两者的输出相同(语义上)。

\n

* 即使没有“迷惑读者”这句话。我想我会做噩梦。

\n
\n

(请耐心等待我尽量不将所有内容拼写得更多 \xe2\x80\x94 毕竟,这确实是不言自明的,对吧?除了,对我来说完全相反......)

\n

c++ vector overload-resolution list-initialization

25
推荐指数
1
解决办法
1577
查看次数

使用双花​​括号初始化vector <string>

有人能解释下面例子中用双花括号和单花括号初始化之间的行为差​​异吗?

代码#1:

vector<string> v = {"a", "b"};
string c(v[0] + v[1]);
cout << "c = " << c;
cout << "c.c_str() = " << c.c_str();
Run Code Online (Sandbox Code Playgroud)

输出#1:

c = ab
c.c_str() = ab
Run Code Online (Sandbox Code Playgroud)

代码#2:

vector<string> v = {{"a", "b"}};
string c(v[0] + v[1]);
cout << "c = " << c;
cout << "c.c_str() = " << c.c_str();
Run Code Online (Sandbox Code Playgroud)

输出#2:

c = a\acke?Z\ 
c.c_str() = a
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization-list

4
推荐指数
1
解决办法
3084
查看次数