草庐IT

$C指针

全部标签

c++ - g++ 和 clang++ - 删除重载转换运算符歧义获取的指针

我试图发布此代码作为对thisquestion的回答,通过制作这个指针包装器(替换原始指针)。这个想法是将const委托(delegate)给它的指针,这样filter函数就不能修改值。#include#includetemplateclassmy_pointer{T*ptr_;public:my_pointer(T*ptr=nullptr):ptr_(ptr){}operatorT*&(){returnptr_;}operatorTconst*()const{returnptr_;}};std::vector>filter(std::vector>const&vec){//*vec.

c++ - 带有指针参数的函数模板重载决策

以下代码演示了我一直用来确定类型T是否为C++模板元编程模式的核心。是特定类模板的实例化:#includetemplatestructS{};templateconstexprboolisS(constS*){returntrue;}templateconstexprboolisS(constT*){returnfalse;}intmain(){Ss;std::cout它有两个重载constexpr功能模板isS,它输出1,正如预期的那样。如果我从第二个isS中删除指针,即将其替换为templateconstexprboolisS(constT){returnfalse;}程序意外输出

c++:push_back() 和 back() 与指针的行为

我有两个C++列表,std::listList1和std::listList2;.现在,我想多次执行以下操作:List1.push_back(new_object);List2.push_back(&List1.back());我的问题:List2中的引用在每一步之后是否仍然有效?即:List2中的第一个元素是否仍然引用List1中的第一个元素等? 最佳答案 是的,它仍然有效。std::list插入不会使迭代器(或在这种情况下指向内容的指针)无效。 关于c++:push_back()和b

c++ - 如何获取指向引用成员的指针?

考虑这段代码:structAA{int&rr;};有没有办法获取指向AA::rr的指针(或者可能是引用)以获取此信息?AA*aa;automm=&AA::rr;//error:cannotcreatepointertoreferencemember‘AA::rr’aa->*mm;同样在gcc-7.0.1decltype(AA::mm)中只是int&。这符合标准吗?这有意义吗?编辑对不起各位,我提出的问题不太好。没有人提示引用不是对象或者没有指向引用的指针这样的东西。目标是相当自私的。给定structAA{int&rr;};我只想拥有这样的功能:templatevoidtest(Memb

c++ - 是否不可能将对 const 指针的引用返回到 const 数据?

我在尝试将reference返回到指向const数据的const指针时遇到了一些问题。在以下代码中,get_pC返回对指向数据的const指针的引用:#includeusingnamespacestd;classC{public:doublec;};classA{public:C*pC;A(constdoubleval):pC(newC){pC->c=val;};};classB{public:constA*pA;B(constA&a):pA(&a){};C*const&get_pC()const{returnpA->pC;}};intmain(){Aa(3.7);Bb(a);C*co

c++ - 函数指针的赋值(effective c++ item 35)

这个问题在这里已经有了答案:functionpointerassignmentandcallinc++?(2个答案)关闭4年前。在effectivec++,item35中,作者通过函数指针引入了策略模式。具体在第172页classGameCharacter;intdefaultHealthCalc(constGameCharacter&gc);classGameCharacter{public:typedefint(*HealthCalcFunc)(constGameCharacter&);explicitGameCharacter(HealthCalcFunchcf=defaultH

c++ - 将指针转换为容器类型中的 const

C++提供从T*的隐式转换至constT*.如果我使用T*现在在容器类中,如vector,那么当然没有隐式转换为vector不再。使用reinterpret_cast似乎可以类型转换整个容器,但这样做真的安全吗?templateconstvector&constVector(constvector&vec){returnreinterpret_cast&>(vec);}//Usage:vectorvec1;vectorvec2=constVector(vec1); 最佳答案 butisitactuallysafetodothis?不

c++ - 重载决策中的 const 指针

GCC将这两个函数声明视为等价的:voidF(int*a){}voidF(int*consta){}test.cpp:Infunction'voidF(int*)':test.cpp:235:error:redefinitionof'voidF(int*)'test.cpp:234:error:'voidF(int*)'previouslydefinedhere这是有道理的,因为在这种情况下,调用者将始终忽略常量...它只会影响函数内部参数“a”的使用。我想知道的是,标准在哪里(如果有的话)表示可以丢弃用作函数参数的指针上的限定符以实现重载解析。(我真正的问题是,我想弄清楚GCC在哪里

c++ - 是否可以使用 const_cast 覆盖我的 const C++ 成员函数,返回一个指向内部非常量数组的 const 指针?

我正在学习C++并遇到了这个const_cast运算符。考虑以下示例:classTest{private:charname[100];public:Test(constchar*n){std::strncpy(name,n,99);name[99]=0;}constchar*getName()const{returnname;}}现在用户可以做Testt("hi");const_cast(t.getName())[0]='z';//modifiesprivatedata...这样好吗?我的意思是修改私有(private)数据,因为returnconstchar*的目的是防止更改私有(p

c++ - 如何将指针映射公开为 const 指针映射?

我有一个类,其中包含一个std::map指针作为成员。现在,我想以只读方式公开该成员:map和指向的对象都不允许修改。在内部,我需要这些指针是非常量的,并且我想将它们公开为常量。我确实有一个至少可以编译的解决方案,但我想知道我是否会遇到任何隐藏的问题。classA{public:conststd::map&GetMap()const{return*(reinterpret_cast*>(&m_Map));}private:std::mapm_Map;};我能想到一个可能的问题:如果std::map的内部布局对于指针映射和const指针映射不同,那么这将导致丑陋的错误。但我想不出任何理智