草庐IT

Pointers

全部标签

c++ - C++ 中的字符串文字的类型推导如何工作?

在C++中,如果我有一个泛型函数:templatevoidfunc(T&s){std::coutT将被推断为typeid(s).name()。但如果我这样做怎么会:func("test");那个通用函数有效,但这个无效:voidfunc(constchar*&s){std::cout我知道如果我在重载中将constchar*&更改为constchar*或constchar*const&它将起作用函数的签名,并且如果我想将参数传递给重载函数,它必须是非临时的。就是不明白T&是怎么回事,推完之后不是应该变成constchar*&吗? 最佳答案

c++ - 优化器删除指针取消引用行

我遇到一个问题,优化器似乎删除了非常必要的代码行。一些背景:我有一个连接PCIe驱动程序的程序。我有一个整数指针UINT32*bar_reg;指向我正在通信的BAR寄存器的用户空间地址。要写入寄存器,我只是取消引用指针。*(bar_reg+OFFSET)=value;没有优化,这工作正常。但是,一旦我打开任何级别的优化,所有取消引用指针的行都会被删除。我最终发现这一点的方法是在VisualStudio中单步执行。但是它独立于平台发生。到目前为止,我已经能够在关闭优化器的情况下过关,但是有人在Linux中使用我的库代码现在想打开优化器。所以我很好奇为什么会出现这个问题以及最合理的修复/解

c++ - 将一个点传递给一个函数

在这个程序中,我创建了两个指向x和y的内存地址的指针(a,b)。在我创建的函数中,它应该交换a和b的内存地址(所以b=a和a=b)。当我编译时它给我一个错误(从'int'到'int*'的无效转换)这是什么意思?我正在传递一个指向该函数的指针,还是将其作为常规int读取?#includeusingstd::cin;usingstd::cout;usingstd::endl;voidpointer(int*x,int*y)//Swapsthememoryaddresstoa,b{int*c;*c=*x;*x=*y;*y=*c;}intmain(){intx,y;int*a=&x;int*b

c++ - 为什么可以将一个数组赋值给一个char指针?

通常当您声明一个指针(例如int)时,您必须为其分配一个内存地址:intvalue=123;int*p=&value;当您创建一个字符指针时,您可以为其分配一个字符数组而不需要包含地址:char*c="CharArray";这是如何运作的?它是否分配内存并指向它?为什么其他类型的指针不能做同样的事情? 最佳答案 Howdoesthiswork?字符串文字存储在可执行文件的只读数据部分(意味着它在编译期间初始化)并且c被初始化为指向该内存位置。隐式array-to-pointerconversion处理其余部分。请注意,将字符串文字转

c++ - 使用 std::move 与使用指向线程的指针相比是否有性能成本?

我想std::move()在类似这样的情况下会有更多的性能成本:std::threadthrd(&func,this);someArrOfThreads[0]=std::move(thrd);对比std::thread*thrd=newstd::thread(&func,this);someArrOfThreadPointers[0]=thrd;这是真的吗?如果是这样,是std::move()改变了线程的内存边界还是其他原因?我意识到区别在于,第一个我实际上是将数组的值分配给线程,另一个是指向线程的指针,第二个线程保留在它的地址中。 最佳答案

c++ 何时返回 const char* 而不是 std :string

在下面的类中,speak()返回constchar*而不是std::string有什么好处或原因吗?classAnimal{protected:std::stringm_name;Animal(std::stringname):m_name(name){}public:std::stringgetName(){returnm_name;}constchar*speak(){return"???";}}; 最佳答案 std::string带有许多可能不需要和未使用的功能。如果您不想要所有这些功能,您应该考虑使用成本。传递std::st

c++ - 为什么指针在函数转换期间会改变自身?

在下面的例子中,我调用了一个Func并将指针传递给它,但在被调用的函数中,参数将指针值显示为完全虚假的东西。如下所示。boolflag=Func(pfspara);-->pfspara=0x0091d910boolFunc(PFSPARApfspara)-->pfspara=0x00000005{returnfalse;}为什么pfspara会变成一些伪造的指针?我无法在调试中重现问题,只能在生产中重现。谢谢。 最佳答案 如果您尝试在VisualStudio中调试优化代码,您不能总是依赖调试器正确显示变量值-特别是如果变量未被使用,

c++ - 指向类成员函数的函数指针问题

首先,我不得不承认我的编程技能非常有限,我接手了一个(非常小的)现有的C++OOP项目,我试图在其中加入我自己的东西。不幸的是,我遇到了一个超出范围的问题我的知识,我希望能在这里找到一些帮助。我正在使用第三方库(无法更改)从相机中抓取图像,并将在此处使用一些占位符名称。第三方库有一个函数“ThirdPartyGrab”来开始连续的实时抓取,并获取一个指向函数的指针,每次新帧到达时都会调用该函数。所以在一个普通的C应用程序中它是这样的:ThirdPartyGrab(HookFunction);“HookFunction”需要声明为:long_stdcallHookFunction(lon

c++ - 通过指向基类对象的指针使用指向派生类对象的指针进行操作

我有这个代码代表银行:classBank{friendclassInvestmentMethod;std::vectoraccounts;public://...BaseBankAccount是银行中所有账户的抽象类:classBaseBankAccount{public:BaseBankAccount(){}virtualintgetInterest()const=0;virtualintgetInvestedSum()const=0;virtualvoidincreaseDepositSum(intadditionalSum)=0;virtualvoidclose(std::str

c++ - C++ 中的指针是原始类型吗?

我想知道std::string的最后一个构造函数提到here.它说:templatestring(InputIteratorbegin,InputIteratorend);如果InputIterator是整型,则通过类型转换begin和end来调用它,表现为第六个构造函数版本(紧挨着它的那个版本):string(static_cast(begin),static_cast(end));在任何其他情况下,参数都被视为迭代器,并且内容被初始化为从迭代器开始引用的元素到迭代器结束引用的元素之前的元素的元素值。那么如果InputIterator是一个char*是什么意思呢?编辑:好吧,我的错。