std :: set和boost :: container :: set之间的主要区别是什么?
在这种情况下使用boost :: bind有什么好处
std::for_each(participants_.begin(), participants_.end(),
boost::bind(&chat_participant::deliver, _1, boost::ref(msg)));
Run Code Online (Sandbox Code Playgroud)
代替
for(iterator actual = participants_.begin(); actual != participants_.end(); ++actual)
(*actual)->deliver(msg);
Run Code Online (Sandbox Code Playgroud)
链接到整个代码(这是一个由boost教程提供的简单服务器示例).
最近,在代码审查期间,我偶然发现了std::string_view通过引用传递的参数。例如下面的代码:
void fun(std::string_view a);
Run Code Online (Sandbox Code Playgroud)
变成
void fun(std::string_view& a);
Run Code Online (Sandbox Code Playgroud)
我觉得这很麻烦,原因如下:
l-value std::string_view。std::string_view是避免复制底层字符串,所以我认为使用&它没有意义。问题是,将std::string_view参数声明为按引用传递而不是按值传递是否有任何优点?
代码段如下
public static string ToCompressedBase64(this string text)
{
using (var memoryStream = new MemoryStream())
{
using (var gZipOutputStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
using (var streamWriter = new StreamWriter(gZipOutputStream))
{
streamWriter.Write(text);
}
}
return Convert.ToBase64String(memoryStream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,如果class包含IDisposable字段,那么它应该实现IDisposable本身并负责处理拥有的对象,因此在这个假设下,在处理streamWriter之后,gZipOutputStream和memoryStream也将被处理掉.但是我们仍然不需要处理memoryStream来调用它上面的toArray()方法.
所以问题是,最后在memoryStream上调用ToArray()方法是否安全?