casting相关内容
我在说“type(value)” - 风格的cast。我读过的书很快地传递过来,只是说它们在语义上等同于C风格的cast,“(type)value”,并且应该避免它们。如果他们的意思是一个老式的演员做同样的事情,为什么他们被添加到语言?另外,因为声明可以包含多余的括号,这段代码:“T x(T(y));不做有意使用函数式cast的人会期望;它声明一个名为x的函数接受T并返回一个T,而不是通过将y转换
..
C ++标准库定义了这个函数,还是我必须求助于Boost? 我在网络上搜索过,除了Boost, C ++ 11 有 std :: to_string p> [n3290:21.5 / 7]: string to_string(int val); string to_string(unsigned val); string to_string(l
..
假设我想将 A * 转换为 char * ,反之亦然,我们有两个选择我们很多人认为我们有两种选择:因为看起来都有效!) struct A { int age; char name [128]; }; A a; char * buffer = static_cast(static_cast(& a)); // choice 1
..
我可以这样做吗? class A {...} class B:private A { const A& foo()const { return *((const A *)this); } }; 我可以从子类继承一个子类,并将其转换为它的公共版本基类?我可以在没有虚拟方法的情况下这样做吗? 我的猜测是肯定的,但我想确保它是安全的/可移植的。
..
让 int a = 0; (int)a 不同的编译器对此代码显示不同的结果: #include using namespace std; void f(int& x) { cout
..
使用此回答由用户GMan 制作了以下代码段(使用Visual C ++ 9编译): class Class { public: operator void(){} }; 类对象; static_cast(object); (void)object; object.operator void(); 我发现转换到 void 不调用 Clas
..
我正在检查dynamic_cast的行为,发现当它失败时,std :: bad_cast异常只会在目标是引用类型时抛出。如果目标是一个指针类型,那么抛出的异常不会抛出。这是我的示例代码: class A { public: virtual〜A () { } }; B类:public A { }; int main() { A * p = new A;
..
我有一个由dlsym()返回的void指针,我想调用void指针指向的函数。 所以我通过转换类型转换: void * gptr = dlsym(some symbol .. typedef void(* fptr)(); fptr my_fptr = static_cast(gptr); 我也尝试过reinterpret_cast但没有运气,虽然C类
..
我在读一本书,发现 reinterpret_cast 不应该直接使用,而是转换为void *与 static_cast : T1 * p1 = ... void * pv = p1; T2 * p2 = static_cast(pv); 而不是: T1 * p1 = ... T2 * p2 = reinterpret_cast
..
我有一个原型 void * myFcn(void * arg)的函数,它用作pthread的起始点。我需要将参数转换为一个int供以后使用: int x =(int)arg; 编译器(GCC版本4.2.4)返回错误: file.cpp:233:error:从'void *'转换为'int'失去精度 解决方案 可以将其转换为 intptr_t 类型
..
我有点困惑在下面的代码中发生了什么: const int e = int * w =(int *)&e; //(1)cast to remove const-ness * w = 5; //(2) cout
..
之间有什么区别 (type)value 和 type(value) 在C ++中? 解决方案 没有区别;按照标准(§5.2.3): 简单类型说明符(7.1.5)后跟括号表达式列表构造一个值给定表达式列表的指定类型。如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)是等效的(在定义中,如果定义的话)。
..
有什么理由比C风格的转换更喜欢 static_cast 吗?它们是等效的吗?是他们的任何种类的速度差异? 解决方案 C ++样式转换由编译器检查。 C风格的cast不会,并且可以在运行时失败 也可以很容易地搜索c ++风格的cast,而很难搜索c风格的casts 另一个大的好处是4个不同的C ++风格的转换更清楚地表达了程序员的意图。 编写C ++时,几乎总是使用C语
..
与正式投放vs. static_cast与dynamic_cast 相关的问题: C ++中使用什么样的语法风格? C风格的转换语法:(int)foo C ++风格的转换语法: static_cast(foo) 构造函数语法: int(foo) $ b b 他们不能翻译成完全相同的指令(是吗?),但它们的效果应该是一样的(对吧?)。 在内置的数字类型之间转
..
假设我有以下代码: void * my_alloc(size_t size) { return new char [size]; } void my_free(void * ptr) { delete [] ptr; } 这样安全吗?或者必须在删除之前将 ptr 转换为 char * ? 解决方案 这取决于“安全”。它通常工作,因为信息与分配本
..
请考虑这一点: #include using namespace std; int main(void) { const int a1 = 40; const int * b1 =& a1; char * c1 =(char *)(b1); * c1 ='A'; int * t =(int *)c1; cout
..
我找不到很多关于const_cast的信息。我可以找到(在堆栈溢出)的唯一信息是: const_cast ()用于添加/删除const )(或波动性)。 这让我很紧张。可以使用const_cast引起意外的行为? 解决方案 或者,什么时候可以使用const_cast? div > const_cast 是安全的,只有当你转换一个最初非 - const 的变量。例如,如果你有
..
我对 reinterpret_cast vs static_cast 的适用性感到困惑。从我已经阅读的一般规则是使用静态转型,当类型可以在编译时解释,因此单词 static 。这是C ++编译器在内部用于隐式转换的转换。 reinterpret_cast 适用于两种情况,将整数类型转换为指针类型,反之亦然,或将一种指针类型转换为另一种类型。我得到的一般想法是这是不便宜,应该避免。 我有点困
..
我想要更好地知道我什么时候应该投降。例如, int + float =?在C ++中的隐式类型转换规则是什么? int * float =? float * int =? int / float =? float / int =? int / int =? int ^ float =? et cetera ... 表达式总是被评估为更
..
我听说过,在C ++中, static_cast 函数应该优先于C风格或简单的函数式转换。这是真的?为什么? 解决方案 主要原因是经典C类型不区分我们所谓的 static_cast(), reinterpret_cast(), const_cast()和 dynamic_cast()。这四种情况完全不同。 A static_cast()通常是安全的。在语言中有一
..