草庐IT

forward_static_call

全部标签

c++ - g++ "calling"一个没有括号的函数(不是 f() 而是 f; )。为什么总是返回 1?

在c++(GNUGCCg++)中,我的代码是“调用”一个没有()的函数。该函数不工作,但编译正常。更令人惊讶的是,代码总是返回1...有什么解释吗?我希望函数名只是一个常规指针,但似乎有点不同......我得到全1只是偶然吗?#includeusingnamespacestd;voidpr(){cout 最佳答案 你实际上并没有调用pr在您的代码中,您将函数指针传递给cout.pr然后被转换为bool当被传递给cout.如果你把cout事先你会输出true而不是1.编辑:使用C++11,您可以编写以下重载:templatestd::

C++ 构造函数 : why is this virtual function call not safe?

这是来自C++11标准sec12.7.4。这比较困惑。文中最后一句话到底是什么意思?为什么最后一个方法调用在B::B不明确的?不应该只是打电话a.A::f?4Memberfunctions,includingvirtualfunctions(10.3),canbecalledduringconstructionordestruction(12.6.2).Whenavirtualfunctioniscalleddirectlyorindirectlyfromaconstructororfromadestructor,includingduringtheconstructionordest

c++ - static_cast<Derived *>(Base pointer) 是否应该给出编译时错误?

static_cast(Basepointer)是否应该给出编译时错误?classA{public:A(){}};classB:publicA{public:B(){}};intmain(){A*a=newA();B*b=static_cast(a);//CompileError?} 最佳答案 它不会给出编译时错误,因为Base-Derived关系可以在运行时存在,具体取决于被强制转换的指针的地址。static_cast总是成功,但如果你不转换为正确的类型,则会引发undefined-behavior。dynamic_cast可能会

c++ - C++ 规范是否说明了如何在 static_cast/const_cast 链中选择类型以用于 C 样式转换?

这个问题涉及我在尝试回答thisearlier,intriguingquestionaboutC-stylecastsandtypeconversions时在C++规范中注意到的内容。.C++规范在§5.4中讨论了C风格的强制转换。它表示强制转换符号将按此顺序尝试以下强制转换,直到找到一个有效的强制转换:const_caststatic_caststatic_cast紧随其后的是const_castreinterpret_castreinterpret_cast紧随其后的是const_cast.虽然我对使用static_cast的含义有一个非常直观的想法。后跟const_cast(例如

c++ - static_cast 被滥用了吗?

我对static_cast的感受很复杂,因为它是可用的最安全的C++强制转换,但同时允许安全和不安全转换,所以你必须知道上下文来说明它是否真的安全或可能导致UB(例如,当强制转换为子类时)。那么为什么没有更安全的显式转换呢?这是一个示例,它可能有用。在COM中,它们必须将接口(interface)指针返回为void**ppv,所以“必须”明确地转换*ppv=(IInterface*)this;后来建议用更安全的C++强制转换*ppv=static_cast(this);但是,即使是static_cast也有意义吗?这里?this是派生自IInterface的类,所以可以简单地写IInt

c++ - C/C++ static const 局部变量的用途

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。为了帮助澄清这个问题以便可以重新打开它,visitthehelpcenter.关闭9年前。在C和C++中,将本地const变量设为static有什么好处?假设初始化不使用其他变量,在调用之间保留值和每次调用设置相同的常量值之间有什么区别吗?一个有效的C编译器可以忽略static吗?在C++中,它避免了调用之间的构造/破坏,但还有其他好处吗? 最佳答案 如果你有类似的东西,它不占用堆栈空间可能是一个好处:staticco

c++ - 有没有办法 "statically"将共享的 .so(或 .o)库插入可执行文件?

首先,考虑以下情况。下面是一个程序://test.cppextern"C"voidprintf(constchar*,...);intmain(){printf("Hello");}下面是一个库://ext.cpp(theexternallibrary)#includeextern"C"voidprintf(constchar*p,...);voidprintf(constchar*p,...){std::cout现在我可以用两种不同的方式编译上面的程序和库了。第一种方式是编译程序不链接外部库:$g++test.cpp-otest$lddtestlinux-gate.so.1=>(0x

c++ - C/C++ : Calling function with no arguments with function which returns nothing

为什么不能调用不带参数的函数,而函数调用作为不返回任何值的参数(恕我直言,这相当于调用不带参数但不带参数的函数)。例如:voidfoo(void){...}voidbar(void){...}foo(bar())不要误会我的意思,我知道void不是一个值,它不能被视为一个值。按照我的逻辑,这是有道理的,应该可以做到。我的意思是,为什么不呢?有什么理由认为这是不可能的吗? 最佳答案 我不相信我听到的任何理由都是好的。看,在C++中,您可以返回void函数的结果:voidfoo(){//...}voidbar(){//...return

c++ - "static const int"导致链接错误( undefined reference )

使用以下代码时,我对链接器错误感到困惑://static_const.cpp--completecode#includestructElem{staticconstintvalue=0;};intmain(intargc,char*argv[]){std::vectorv(1);std::vector::iteratorit;it=v.begin();returnit->value;}但是,这在链接时会失败——不知何故,它需要一个符号来表示静态const“值”。$g++static_const.cpp/tmp/ccZTyfe7.o:Infunction`main':static_con

c++ - std::call_once vs std::mutex 用于线程安全初始化

我对std::call_once的用途有点困惑。需要明确的是,我完全了解std::call_once的作用以及如何使用它。它通常用于原子地初始化某个状态,并确保只有一个线程初始化该状态。我还在网上看到许多尝试使用std::call_once创建线程安全的单例。作为demonstratedhere,假设您编写了一个线程安全的单例,如下所示:CSingleton&CSingleton::GetInstance(){std::call_once(m_onceFlag,[]{m_instance.reset(newCSingleton);});return*m_instance.get();}