相关疑难解决方法(0)

C++中的'typeid'与'typeof'

我想知道有什么区别之间typeid以及typeof在C++中.这就是我所知道的:

此外,这里是我创建的测试代码测试,我发现typeid它不会返回我的预期.为什么?

main.cpp中

#include <iostream>  
#include <typeinfo>  //for 'typeid' to work  

class Person {  
    public:
    // ... Person members ...  
    virtual ~Person() {}  
};  

class Employee : public Person {  
    // ... Employee members ...  
};  

int main () {  
    Person person;  
    Employee employee;  
    Person *ptr = &employee;  
    int t = 3;  

    std::cout << typeid(t).name() << std::endl;  
    std::cout << typeid(person).name() << std::endl;   // …
Run Code Online (Sandbox Code Playgroud)

c++ typeof typeid

144
推荐指数
5
解决办法
32万
查看次数

功能中的过早返回效率

这是我作为一个经验不足的程序员经常遇到的情况,我特别想知道我正在努力优化的一个雄心勃勃,速度密集的项目.对于主要的类C语言(C,objC,C++,Java,C#等)及其常用的编译器,这两个函数是否同样有效运行?编译代码有什么区别吗?

void foo1(bool flag)
{
    if (flag)
    {
        //Do stuff
        return;
    }

    //Do different stuff
}

void foo2(bool flag)
{
    if (flag)
    {
        //Do stuff
    }
    else
    {
        //Do different stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,是否有提前breakreturn早期的直接效率奖金/罚款?堆栈框架是如何涉及的?是否有优化的特殊情况?是否有任何因素(如内联或"Do stuff"的大小)可能会对此产生重大影响?

我总是支持改进可读性而非次要优化(我通过参数验证看到foo1很多),但这种情况经常发生,我想一劳永逸地抛开所有的担忧.

而且我知道过早优化的陷阱......呃,这些都是一些痛苦的回忆.

编辑:我接受了答案,但EJP的答案非常简洁地解释了为什么使用a return几乎可以忽略不计(在汇编中,return在函数末尾创建一个'分支',这非常快.分支改变了PC寄存器和也可能会影响缓存和管道,这是非常小的.)特别是对于这种情况,它实际上没有区别,因为它们if/elsereturn函数末尾都创建了相同的分支.

c c# c++ java compiler-optimization

96
推荐指数
5
解决办法
3976
查看次数

为什么typeid.name()使用GCC返回奇怪的字符以及如何使其打印未拼写的名称?

我怎么运行这个main.cpp:

#include <iostream>
#include <typeinfo>

using namespace std;

struct Blah {};

int main() {
  cout << typeid(Blah).name() << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过使用GCC 4.4.4版进行编译:

g++ main.cpp
Run Code Online (Sandbox Code Playgroud)

我明白了:

4Blah
Run Code Online (Sandbox Code Playgroud)

在Visual C++ 2008上,我会得到:

struct Blah
Run Code Online (Sandbox Code Playgroud)

有没有办法让它只是打印Blahstruct Blah

c++ gcc g++ rtti

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

如何在C++中确定运行时的实际对象类型;

让我们说我们有一个类层次结构.在底部我们有Base和顶部Derived.如何确定对象类,即使它被转换为基类指针.

Base* b = new Derived():

typeid(b).name(); // i want this to tell me that this is actually derived not base object
Run Code Online (Sandbox Code Playgroud)

有什么方法除了手动实现字符串字段或这样的虚拟get函数?

PS:我在谈论与编译器无关的解决方案

c++ typeid typeinfo

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

C++多态:检查子类的数据类型

可能重复:
在C++中查找对象的类型

您好,
我很抱歉,如果它是重复但我无法在这里找到我的问题的答案.
假设我们在c ++中有以下类结构:

class CPolygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width=a; height=b; }
  };

class CRectangle: public CPolygon {
  public:
    int area ()
      { return (width * height); }
  };
Run Code Online (Sandbox Code Playgroud)

现在我有一个指向CPolygon对象的指针.如何检查它是否实际上是指向类CRectangle对象的指针?

c++ polymorphism object

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

C++中的静态与动态类型检查

我想知道什么是静态和动态类型检查以及它们之间的差异.

c++

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

检查指针是否指向特定的C++类

可能重复:
在C++中查找对象的类型

我有一个问题,检查指针,看看它们是否符合特定的派生类,并采取必要的行动.

可以说我目前有2个派生类DerivedClass1DerivedClass2基类BaseClass.我想检查以下操作.

Ptr<BaseClass> ptr;

if (ptr points to DerivedClass1) { action1 } else { action2 }

如何检查特定DerivedClass的ptr点?

c++ pointers

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

C++中的运行时类型信息

什么是C++中的运行时类型控件?

c++ rtti

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

如何找出指针在C++中指向的对象类型?

假设我已经class SuperClass { public: int a; }class SubClass : SuperClass { public: int b; }我一起指向SubClass的一个实例,SubClass *subPointer并将该指针指向SuperClass指针SuperClass *superPointer = subPointer.当然,我总是可以将superPointer对象强制转换为SubClass的指针,因为它存储的唯一内容是地址.但是我如何知道对象superPointer是指向SubClass的实例还是只是一个SuperClass指针?

c++ polymorphism pointers instance

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

如何在C++/CLI中执行C#typeof(bool)?

我试图找出VisualHint.SmartPropertyGrid.PropertyGrid是否满足我设置属性的需要,我的一些属性是布尔值.

其中一个参数是

//   container:
//     The instance of an object containing the C# property displayed in this new
//     property.
Run Code Online (Sandbox Code Playgroud)

所以一般来说,我可以把它交给一个合适的对象 - 但是,布尔值是值类型,而不是对象.

在C#中,正确的语法是输入容器typeof(bool).有没有明智的方法在C++中做到这一点,还是我必须制作自己的bool对象?

c# types c++-cli

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

Java"实现"c ++中的等价物?

我想创建一个优先级队列类,我可以在不同的程序中一次又一次地重复使用,它只存储一个类型/类.

我可以通过使用compareTo方法阻止任何其他类型/类进入队列,但这意味着队列类应该在进入队列的所有类型/类中都需要compareTo方法.

我知道在Java中,您可以使类实现Comparable以确保该类实现compareTo方法.所以我想知道c ++中是否有类似的东西.

同样,我不能使用模板,所以,任何替代品将不胜感激.模板不受限制的原因我也不知道,要求这个程序的人不会对此有所了解.它也必须纯粹是我自己的优先级队列代码.

c++ code-reuse

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

看一个对象是什么类

如果我A在C++中有一个指向基类的指针,我怎么能在代码中告诉指针是派生类B还是C

c++ inheritance pointers class base

0
推荐指数
1
解决办法
207
查看次数