相关疑难解决方法(0)

有没有返回RValue Reference(&&)有用的情况?

函数应该返回RValue Reference是否有原因?技巧,技巧,或成语或模式?

MyClass&& func( ... );
Run Code Online (Sandbox Code Playgroud)

我知道一般返回引用的危险,但有时我们会这样做,不管我们(T& T::operator=(T)只是一个惯用的例子).但是怎么样T&& func(...)?我们会从中获得这样的一般场所吗?与仅仅客户端代码相比,当编写库或API代码时,可能会有所不同?

c++ rvalue-reference move-semantics c++11

73
推荐指数
3
解决办法
1万
查看次数

为什么VC++字符串不被引用计数?

STL标准不要求从std :: string中重新计算.但事实上,大多数C++实现都提供了refcounted,copy-on-write字符串,允许您将值作为基本类型传递.此外,这些实现(至少g ++)使用原子操作使这些字符串无锁和线程安全.

简单的测试显示了写时复制语义:

#include <iostream>
#include <string>

using namespace std;

void foo(string s)
{
    cout<<(void*)s.c_str()<<endl;
    string ss=s;
    cout<<(void*)ss.c_str()<<endl;
    char p=ss[0];
    cout<<(void*)ss.c_str()<<endl;
}

int main()
{
    string s="coocko";
    cout<<(void*)s.c_str()<<endl;
    foo(s);
    cout<<(void*)s.c_str()<<endl;
}
Run Code Online (Sandbox Code Playgroud)

在使用非常数成员后,只有两个地址完全打印.

我使用HP,GCC和Intel编译器测试了这段代码,得到了类似的结果 - 字符串可以作为写时复制容器.

另一方面,VC++ 2005清楚地表明每个字符串都是完全复制的.

为什么?

我知道VC++ 6.0中存在一个错误,它具有非线程安全的引用计数实现,导致随机程序崩溃.这是什么原因?他们只是害怕再使用ref-count,即使这是常见的做法?他们宁愿不使用重新计算来解决问题吗?

谢谢

c++ string reference-counting copy-on-write visual-c++

13
推荐指数
4
解决办法
5202
查看次数