草庐IT

Pointers

全部标签

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

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FindingthetypeofanobjectinC++我有一个关于检查指针以查看它们是否符合特定派生类并采取必要措施的问题。假设我目前有2个派生类DerivedClass1和DerivedClass2和基类BaseClass.我想检查以下操作。Ptrptr;if(ptrpointstoDerivedClass1){Action1}别的{Action2}如何检查指向特定DerivedClass的ptr点?

c++ - 将可修改的参数传递给 C++ 函数

假设我想给一个函数传递一个可修改的参数,我应该选择什么:通过指针传递还是通过引用传递?boolGetFoo(Foo&whereToPlaceResult);boolGetFoo(Foo*whereToPlaceResult);我问这个是因为我一直认为通过引用传递参数是最佳实践(1),但在检查了一些本地代码数据库后,我得出结论,最常见的方法是(2)。此外,该人本人(BjarneStroustrup)建议使用(2)。(1)和(2)的[缺点]优点是什么,还是只是个人品味问题? 最佳答案 在以下情况下,我更喜欢引用而不是指针:不能为空不能更

c++ - 转换 c_str() 仅适用于短字符串

我在C++中使用C库并编写了一个包装器。有一次我需要将std::string转换为C风格的字符串。有一个带有函数的类,它返回一个字符串。如果字符串很短,则转换返回的字符串有效,否则无效。这是一个说明问题的简单简化示例:#include#includeclassStringBox{public:std::stringgetString()const{returntext_;}StringBox(std::stringtext):text_(text){};private:std::stringtext_;};intmain(intargc,char**argv){constunsigne

c++ - 什么是 `char*` ?

char*到底是什么?它是一个指针吗?我认为指针在标识符之前有星号,而不是类型(这不一定是同一件事)......? 最佳答案 它是一个指向char的指针。当声明一个指针时,星号在类型之后和标识符之前,空格无关紧要。这些都声明了char指针:char*pointer1;char*pointer2;char*pointer3;char*pointer4;//Thisisillegible,butlegal!让事情变得更加困惑的是,一次声明多个变量时,星号仅适用于单个标识符(在其右侧)。例如:char*foo,bar;//fooisapo

c++ - 使用指针时的注意事项

这是一个简单但重要的问题。在C和C++中使用指针以确保在AIX上避免SEGMENTATIONFAULT时该做什么和不该做什么?哪里char*优于字符数组? 最佳答案 特定于C++避免手动管理内存,而是使用RAII容器,例如std::auto_ptr、boost::scoped_ptr、boost::shared_ptr和等效的数组容器。更简单的是,通常std::vector工作得很好,而且根本不需要使用任何指针。最后,您可以传递引用,而不是传递指向大型或可修改数据结构的指针。指针可以表示数组,而引用可以避免这种歧义。索引数组是大多数

c++ - 这个声明是什么意思? "good C++ programming typically doesn' t 以复杂的方式使用指针。”

在thisotherquestion在我读到的获胜答案中:...goodC++programmingtypicallydoesn'tusepointersincomplicatedways.不要以复杂的方式使用指针是什么意思?(我真的希望这不是一个主观问题) 最佳答案 当然这是主观的。有些人似乎认为几乎所有指针都“复杂”,而有些人在进行大量算术运算时很容易在三个(或更多)间接级别之间移动,从不混淆。 关于c++-这个声明是什么意思?"goodC++programmingtypically

c++ - 新表达式会返回一个指向数组的指针吗?

在此excellentanswerbyAndreyT,他解释说,在C中,当一个函数需要一个在编译时已知维度的数组时,声明是一个主要的技术级错误voidprocess_array(int*ptr,size_tplen);代替voidprocess_array(int(*arr_ptr)[10]);此外,他认为许多程序员忘记了第二种选择,只知道第一种。他写道,造成这种行为的原因之一是,当需要动态分配数组并将其传递给第二个版本时,程序员不知道该怎么做;他们已经习惯了返回int*的int*p=malloc(sizeof(*p)*10)。在C中,方法是如他所示int(*arr_ptr)[10]=

c++ - 如何将 constexpr 指针设置为物理地址

在嵌入式编程中,您经常需要设置指向物理地址的指针。地址不可重定位且固定。这些不是由链接器设置的,因为它们通常代表寄存器或在这种情况下位于OPT存储器中预定地址的校准数据。该数据是在芯片制造商首次在生产中测试设备时设置的。所以第一次尝试是:staticconstexpruint16_t*T30_CAL=reinterpret_cast(0x1FFFF7B8u);但这会导致在GCC下出现以下警告/错误,并且根据标准(c++14)是“非法的”。..xyz/xxxx/calibration.cpp:23:40:错误:从整数到指针的reinterpret_cast现在我可以捏造它了constex

c++ - 由于 LARGEADDRESSAWARE 检测指针算术

我想将我的应用程序切换到LARGEADDRESSAWARE。需要注意的问题之一是指针运算,因为指针差异不能再表示为带符号的32b。有什么方法可以在大型C++项目中自动查找指针减法的所有实例吗?如果没有,是否有一些“最省力”的手动或半自动方法如何实现? 最佳答案 PC-Lint可以发现这类问题。看http://gimpel-online.com/MsgRef.html,错误代码947:Subtractoperatorappliedtopointers--Anexpressionoftheformp-qwasfoundwhereboth

C++:指针作为哈希表中的键

在程序运行过程中使用指针作为哈希表键是否有任何问题?(不需要存储到磁盘并在以后使用它,因为这会导致明显的问题)在很多情况下,我需要快速知道一个对象是否属于某个对象管理器。一种快速检查它的方法是将对象管理器中的每个对象存储在哈希表中,其中对象的指针是实际对象的键:例如,HashTable 最佳答案 不,没有问题。这就像存储一个int。指针具有一个不变的值,该值唯一标识资源。如果你没有用好你的指针当然会有问题,但这是另一回事,不相关。 关于C++:指针作为哈希表中的键,我们在StackOve