【发布时间】:2016-05-15 02:36:14
【问题描述】:
为什么下面的代码会编译?它可以使用 clang 编译并运行良好,并打印 first. 但是,我认为正确的行为应该是抱怨并发出适当的错误。
#include <iostream>
#include <string>
int main()
{
std::string s{ "first", "second" };
std::cout << s << std::endl;
}
这个问题的灵感来自this。
【问题讨论】:
-
这是因为“第一个”字符串在它的末尾有一个隐含的“\0”......告诉
string对象停止寻找更多的字符(即使它可能仍在将“第二”的全部内存分配给) -
@DarthRubik:不。这不是正在发生的事情。
-
根本问题和this question一样。