相关疑难解决方法(0)

std :: map默认值

当密钥不存在时,有没有办法指定默认值std::mapoperator[]返回值?

c++ stdmap

76
推荐指数
8
解决办法
7万
查看次数

有效的C++项目23首选非成员非友元函数到成员函数

虽然对类设计中的一些事实感到困惑,特别是函数是否应该是成员,但我查看了有效的c ++并找到了第23项,即将非成员非友元函数更喜欢成员函数.第一手阅读Web浏览器示例有一定意义,但是该示例中的便捷函数(在本书中命名为非成员函数)会改变类的状态,不是吗?

  • 所以,第一个问题,他们不应该成为会员吗?

  • 进一步阅读,他认为STL函数,实际上某些类没有实现的函数是在stl中实现的.继他们演变成被包装到一些合理的命名空间,如一些便利功能,这本书的想法std::sort,std::copyalgorithm.例如,vector类没有sort函数,并且使用stl sort函数,因此它不是向量类的成员.但是也可以将相同的推理延伸到向量类中的某些其他函数,例如,assign这样也不能作为成员实现,而是作为便利函数实现.但是,这也会改变对象的内部状态,例如它操作的排序.那么这个微妙但重要(我猜)问题背后的理由是什么呢?

如果你有权访问这本书,你可以为我澄清这些要点吗?

c++ encapsulation member-functions effective-c++ non-member-functions

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

为什么VC++无法优化整数包装器?

在C++中,我正在尝试围绕64位整数编写包装器.我的期望是,如果正确编写并且所有方法都被内联,那么包装器应该与真实类型一样高效.在SO上回答这个问题似乎与我的期望一致.

我写了这段代码来测试我的期望:

class B
{
private:
   uint64_t _v;

public:
   inline B() {};
   inline B(uint64_t v) : _v(v) {};

   inline B& operator=(B rhs) { _v = rhs._v; return *this; };
   inline B& operator+=(B rhs) { _v += rhs._v; return *this; };
   inline operator uint64_t() const { return _v; };
};

int main(int argc, char* argv[])
{
   typedef uint64_t;
   //typedef B T;
   const unsigned int x = 100000000;

   Utils::CTimer timer;
   timer.start();

   T sum = 0;
   for (unsigned int i = …
Run Code Online (Sandbox Code Playgroud)

c++ optimization wrapper visual-c++

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

int和只包含int的结构之间是否存在性能差异?

在C中,typedef不会授予您任何其他类型安全性.您可以在任何可以使用旧类型的地方使用新类型.有时这就是我想要的,有时却不是.有时我希望编译器在我滥用新类型时警告我.

为了实现这一点,我有时做这样的事情:

typedef struct {
    int value;
} NewType;

NewType doSomethingNT(NewType a, NewType b) {
    return a.value + b.value;
}
Run Code Online (Sandbox Code Playgroud)

相比:

int doSomethingI(int a, int b) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

(这只是一个例子.让我们假设在两种情况下都有一个函数调用开销,否则我要求函数在两种情况下都内联.但是我们不要将doSomethingNT与bare +运算符进行比较,显然后者更快因为它没有函数调用开销)

我想我问,是否有任何开销在"装箱"原始类型的单元素结构,但使用该结构作为值类型.(即我不是在调用malloc并使用指针,就像拳击在Java中一样.)

c int performance struct

6
推荐指数
1
解决办法
191
查看次数