相关疑难解决方法(0)

为什么"使用命名空间std"被认为是不好的做法?

我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::coutstd::cin直接代替.

为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?

c++ namespaces using-directives std c++-faq

2486
推荐指数
36
解决办法
78万
查看次数

什么是"缓存友好"代码?

" 缓存不友好代码 "和" 缓存友好 "代码之间有什么区别?

如何确保编写高效缓存代码?

c++ memory performance caching cpu-cache

703
推荐指数
7
解决办法
14万
查看次数

将多种类型存储为 C++ 字典中的值?

我想编写一个行为几乎等同于 Python 字典的 C++ 对象。C++std::mapstd::unordered_mapPython 字典已经具备的一些功能,但缺乏最重要的功能之一,即能够添加任意对象和类型。即使不可能,您离实现 Python 字典的功能还有多远?

之前的一些问题(此处此处)无法处理向字典添加多种类型的问题。

例如,我希望能够在 C++ 中做这样的事情:

my_dict = {'first': 1,
           'second': "string",
           'third': 3.5,
           'fourth': my_object}
my_dict['fifth'] = list([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的解决方案是使用void指向重新解释的数据的指针,或者某种具有某些类型限制的运行时多态性?

c++ python

5
推荐指数
1
解决办法
2006
查看次数

向多个继承的类的超类强制转换void *不会调用正确的方法

我将指向一组异构对象的指针列表存储在容器中,并使用字符串来标识它们。关于此操作的安全性,我已经在这里进行了讨论,我对此表示满意。

问题在于,当该类具有多个继承并且我尝试将相同的指针强制转换为一个或另一个超级类时,似乎第二次强制转换失败。

这是一个例子:

#include <iostream>
#include <map>
using namespace std;

class A {
public:
  virtual void hello() = 0;
};

class B {
public:
  virtual void goodbye() = 0;
};

class C : public A,
          public B
{
public:
  void hello() override {
    std::cout << "C says: Hello World!" << std::endl;
  }
  void goodbye() override {
    std::cout << "C says: GoodBye World!" << std::endl;
  }
};

class D : public A {
public:
  void hello() override {
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ casting multiple-inheritance void-pointers

2
推荐指数
1
解决办法
84
查看次数