相关疑难解决方法(0)

C++中的POD类型是什么?

我有几次遇到这个术语POD型.这是什么意思?

c++ types c++-faq

919
推荐指数
8
解决办法
29万
查看次数

在std :: string的上下文中首字母缩略词SSO的含义

关于优化和代码风格的C++问题中,在优化副本的上下文中,有几个答案提到了"SSO" std::string.在这种情况下,SSO意味着什么?

显然不是"单点登录"."共享字符串优化",或许?

c++ string optimization

141
推荐指数
3
解决办法
2万
查看次数

为什么我们复制然后移动?

我看到某个地方有人决定复制一个对象并随后将其移动到一个类的数据成员的代码.这使我感到困惑,因为我认为移动的重点是避免复制.这是一个例子:

struct S
{
    S(std::string str) : data(std::move(str))
    {}
};
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  • 为什么我们不采用右值引用str
  • 副本不会很贵,特别是给出类似的东西std::string吗?
  • 作者决定复制然后移动的原因是什么?
  • 我应该什么时候自己做?

c++ move-semantics c++11

97
推荐指数
4
解决办法
7736
查看次数

通过Value或Reference传递std :: string

可能重复:
传递const std :: string&作为参数的日期是多少?

如果std::string支持移动语义,我应该通过值传递还是通过引用传递(到非内联函数)?那么使用小字符串优化(SSO)的实现呢?

c++ string std move-semantics

72
推荐指数
3
解决办法
11万
查看次数

C++ map <std :: string> vs map <char*> performance(我知道,"再次?")

我正在使用带std::string钥匙的地图,虽然一切正常,但我没有达到预期的性能.我搜索了一些地方来优化和改进一些东西,当一位同事说,"那个字符串键会变慢."

我读了几十个问题,他们一直说:

"不要使用char *键作为键"
" std::string键永远不是你的瓶颈"
"a char *和a 之间的性能差异std::string是一个神话."

我不情愿地尝试了一把char *钥匙而且有区别,差别很大.

我将问题归结为一个简单的例子:

#include <stdio.h>
#include <stdlib.h>
#include <map>

#ifdef USE_STRING

#include <string>
typedef std::map<std::string, int> Map;

#else

#include <string.h>
struct char_cmp { 
    bool operator () (const char *a,const char *b) const 
    {
        return strcmp(a,b)<0;
    } 
};
typedef std::map<const char *, int, char_cmp> Map;

#endif

Map m;

bool test(const char *s)
{
    Map::iterator it = m.find(s);
    return it != m.end(); …
Run Code Online (Sandbox Code Playgroud)

c++ performance dictionary stdmap

41
推荐指数
3
解决办法
5万
查看次数

如果const引用仅花费一个副本,为什么在C++ 11中推荐使用值传递(如果需要副本)?

我试图理解移动语义,右值引用std::move等等.我一直试图通过搜索本网站上的各种问题来解决,如果需要复制,为什么传递const std::string &name+ _name(name)不如std::string name+ + _name(std::move(name)).

如果我理解正确,下面需要一个副本(通过构造函数)加上一个移动(从临时到成员):

Dog::Dog(std::string name) : _name(std::move(name)) {}
Run Code Online (Sandbox Code Playgroud)

替代(和老式)方法是通过引用传递它并将其复制(从引用到成员):

Dog::Dog(const std::string &name) : _name(name) {}
Run Code Online (Sandbox Code Playgroud)

如果第一种方法需要复制并同时移动两种方法,而第二种方法只需要一个副本,那么第一种方法如何首选,在某些情况下更快?

c++ move-semantics c++11

33
推荐指数
3
解决办法
4517
查看次数

检查filesize而不在c ++中打开文件?

我正在尝试获取大文件(12gb +)的文件大小,我不想打开文件这样做,因为我认为这会占用大量资源.有没有好的API可以这样做?我在Windows环境中.

c++ windows winapi

28
推荐指数
5
解决办法
3万
查看次数

按值或按引用传递C++字符串

我想知道C++字符串是否被认为足够小,以便在通过值而不是通过引用传递时更高效.

c++ string

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

为什么传递值而不是const引用?

由于const引用与传递值几乎相同,但没有创建副本(据我所知).那么是否需要创建变量的副本(因此我们需要使用pass by value).

c++ arguments const function

9
推荐指数
3
解决办法
3627
查看次数

通过值或const引用?

一组很好的规则来确定是否通过值或const引用传递

  • 如果函数打算将参数更改为副作用,请使用非const引用.
  • 如果函数不修改其参数且参数是基本类型,则按值取值.
  • 否则通过const引用获取它,除非在下列情况下:如果函数需要复制const引用,请按值取值.

对于构造函数如下,如何确定它?

class A
{
public:
    A(string str) : mStr(str) {} // here which is better, 
                                 // pass by value or const reference?

    void setString(string str)  { mStr = str; } // how about here?

private:
    string mStr;
};
Run Code Online (Sandbox Code Playgroud)

c++ parameter-passing

7
推荐指数
1
解决办法
3892
查看次数