相关疑难解决方法(0)

循环效率 - C++

初学者质疑,关于循环效率.我已经开始用C++编程(我的第一语言),并且一直在使用Bjarne Stroustrup的'Principles and Practice Using C++'.我已经完成了前面几章的介绍,并且刚刚介绍了循环的概念.

关于循环的第一个练习请求如下:字符'b'是char('a'+ 1),'c'是char('a'+ 2)等.使用循环写出一个表具有相应整数值的字符:

a 97,b 98,...,z 122

虽然,我使用大写,我创建了以下内容:

int number = 64; //integer value for @ sign, character before A
char letter = number;//converts integer to char value
int i = 0;

while (i<=25){
    cout << ++letter << "\t" << ++number << endl;
    ++i;
    }
Run Code Online (Sandbox Code Playgroud)

我应该只针对"我"出现在一个循环中,还是在类型之间转换时根本不可能?除了将字符值转换为它的整数对应物(即当前方法的反面)或根本没有转换并且具有字母存储'@'之外,我无法想到除上述任何其他方式之外的其他方式.

c++ performance loops

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

C++多态性:从父类到子类

在C++中我们可以将子类指针转换为父类,但是有没有办法将它转换回来:从父类获得,从子类获得,给孩子类回来?

我的意思是:

class Parent
{
    ...
};

class Child : public Parent
{
    ...
};

int main(int argc, char const *argv[])
{
    Child* child = new Child();
    Parent* parent = child;
    Child* old_child = parent; // how to do this??
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的回答.

c++ oop polymorphism

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

需要澄清C风格,重新解释和const转换

我是否正确地假设C风格的演员阵容(不鼓励)只不过是reinterpret_casts?使用后者在寻找令人讨厌的演员阵容时视觉上引人注目且易于搜索,因此推荐使用C风格的演员阵容?

如果使用const_cast抛弃const并且未定义写入原始const对象,const_cast的目的是什么?

注意:我知道Bjarne正确地谴责他们不安全的演员操作,甚至说" 丑陋的操作应该有一个丑陋的句法形式".因此C++中的转换操作符的冗长程度.所以我会尽量减少他们的使用量.诺言.:)

c++ casting const-cast reinterpret-cast

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

从'void*'到'unsigned char*'的转换无效

我有以下代码;

void* buffer = operator new(100);
unsigned char* etherhead = buffer;
Run Code Online (Sandbox Code Playgroud)

我在尝试编译时遇到以下错误;

error: invalid conversion from ‘void*’ to ‘unsigned char*’
Run Code Online (Sandbox Code Playgroud)

为什么我会得到那个错误,我认为一个空白是"无类型"所以它可以指向任何东西,或任何东西可以指向它?

c++ void-pointers unsigned-char

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

C++类型转换:使用显式转换的好处?

在c ++中使用这些运算符而不是隐式转换有什么好处?

dynamic_cast <new_type> (expression)
reinterpret_cast <new_type> (expression)
static_cast <new_type> (expression) 
Run Code Online (Sandbox Code Playgroud)

为什么,在哪里,我们应该在哪种情况下使用它们?它们在OOP中很少使用是真的吗?

c++ casting

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

C ++类型转换

可能重复:
什么时候应该使用static_cast,dynamic_cast和reinterpret_cast?

直到几天前,我一直在C ++中使用C样式类型转换,因为它似乎工作良好。我最近发现在C ++中使用C是非常糟糕的..

我以前从未真正使用过C ++强制转换,所以我想知道是否有人可以告诉我(最好用自己的话说)static_cast,reinterpret_cast和const_cast之间的区别是什么?

我知道const_cast从某事物中删除了一个“ const”,但是我不确定它们之间有什么区别,以及在不同情况下需要使用什么。

c++ casting

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

C++ 类型将 int * 转换为 class

可能的重复:
常规强制转换、静态强制转换、动态强制转换
未定义、未指定和实现定义的行为

我面临一个奇怪的问题。在下面的代码片段中我定义了一个类

   class NewClass
   {
      public:
         void Test()
         {
             cout<<"NewClass Test"<<endl;
         }
   };
Run Code Online (Sandbox Code Playgroud)

在我的 main() 方法中,我写道:

        void main()
        {
           int *ptr = new int();
           NewClass *n = ((NewClass *)ptr);
           n->Test();
        }
Run Code Online (Sandbox Code Playgroud)

它显示“NewClass Test”。我不明白如何将任何指针类型转换为 NewClass 并且仍然可以工作。

提前致谢!

c++ casting

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

多态C风格的演员有任何开销吗?

  • 将指向实例类的实例的指针强制转换为实例基类在C++中是否有任何运行时开销,还是在编译时解析?

  • 如果确实有,那么在铸造操作中究竟需要计算什么?

例:

class Foo;
class Bar : public Foo;

Bar* y = new Bar;
Foo* x = (Foo*) y;
Run Code Online (Sandbox Code Playgroud)

(我知道我应该使用C++风格的演员表,答案可能与他们相同)

c++ polymorphism casting

4
推荐指数
2
解决办法
944
查看次数

如何在现代C++中将float转换为int

奇怪,因为它可能看起来,我无法找到如何干净地转换floatint.

这种技术

int int_value = (int)(float_value + 0.5);
Run Code Online (Sandbox Code Playgroud)

触发一个

warning: use of old-style cast
Run Code Online (Sandbox Code Playgroud)

在gcc.

那么,什么是现代风格,简单的方式转换floatint?(我当然接受精度的损失)

c++ floating-point casting

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

动态向下转换为抽象类(C++)

我试图从C++中的java中学习一些面向对象的编程方面.不过我有在使用一些困难dynamic_cast,我会用instanceofJava编写的.

我有一个基类Cell和一个派生(抽象)类Obstacle.我已经像这样定义了它:Obstacle : public Cell并且Obstacle包含一个纯虚拟析构函数.现在在Cell课堂上我想实现一个方法bool Cell::isAccesible().我已经实现了如下:

bool Cell::isAccessible() {

    Obstacle *obs = dynamic_cast<Obstacle*>(this);

    if (obs != NULL) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

"运行时dynamic_cast的操作数必须具有多态类类型".

我想要实现这个的方式有什么问题?任何指导表示赞赏.

c++ polymorphism casting

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