草庐IT

static-variables

全部标签

c++ - 用户定义类型的 static_cast

这可能吗?为什么要这么做?classFoo;classBar;......Foofoo;Barbar=static_cast(foo);通常static_cast用于数字类型和指针,但它可以用于用户定义的数据类型,也就是类吗? 最佳答案 Barbar=static_cast(foo);此转换将失败。Foo和Bar是不兼容的类型,除非至少满足以下条件之一:Foo派生自Bar,或者Bar有一个接受Foo或Or的构造函数Foo具有到Bar的用户定义转换。这里更大的问题不是它是否会成功转换。更大和实际的问题应该是:你想从这样的Actor阵容

c++ - "variable|variable"在 C++ 中是什么意思?

当我看到这个时,我正在研究这个ITE8712看门狗定时器演示代码:voidInitWD(charcSetWatchDogUnit,charcSetTriggerSignal){OpenIoConfig();//opensuperIOofconfigurationforSuperI/OSelectIoDevice(0x07);//selectdevice7//setwatchdogcounterofunitWriteIoCR(0x72,cSetWatchDogUnit|cSetTriggerSignal);//CloseIoConfig();//closesuperIOofconfigu

C++ 模板元编程, "static if"解决方法 - 可以改进吗?

我有一个函数可以扫描用户的文件系统,用路径填充一个vector,然后对它进行排序或不排序。由于用户应该能够在编译时决定他是否想要对vector进行排序,因此我使用模板和辅助类来代替非常需要(但不存在)的“静态if”。考虑这段代码:enumclassSort{Alphabetic,Unsorted};templatestructSortHelper;templatestructSortHelper{staticvoidsort(vector&mTarget){sort(begin(mTarget),end(mTarget));}};templatestructSortHelper{sta

c++ - static constexpr 成员的统一初始化

根据:constexprstaticdatamembergivingundefinedreferenceerrorstaticconstexpr类成员必须满足两个要求:templatestructwrapper{staticconstexprTpvalue{};//1};templateconstexprTpwrapper::value;//2structfoo{};intmain(){autoconst&x=wrapper::value;(void)x;}在类定义内部初始化(因为它是constexpr)在类定义之外定义(因为它是静态的)如果我把1.改成统一初始化templatestr

c++ - 是否可以为不应编译的表达式表达 static_assert?

我想用以下形式表达一个static_assert:static_assert(expressionshouldnotcompile);让我添加一个完整的例子:templatestructA{};templatestructA{voida(){}};Ab;static_assert(!compile(b.a()));orstatic_assert(!compile(A::a()));因此,我们的想法是能够确保表达式(具有有效语法)不会被编译。如果可能的话,如果解决方案只使用C++11会更好。 最佳答案 好的,考虑到您问题的上下文有些模

c++ - SFINAE: 'static_cast<void>()' 或 ', void()'?

在任意类型上执行SFINAE时,通常需要将表达式的结果转换为void。我见过两种方法;转换为无效:(void)(expr)//orstatic_cast(expr)或者,或者,使用带有voidprvalueRHS的逗号运算符:(expr),void()据我了解,在这两种情况下,expr都会被求值(为了格式良好,在非求值上下文中)并丢弃结果(或结果类型,在非求值上下文中);在任何一种情况下,即使是病态类T也无法覆盖T::operatorvoid()或operator,(T,void)。(参见:Whyis"operatorvoid"notinvokedwithcastsyntax?、Wha

c++ - extern "C"static void* 函数

在阅读了extern和static之后,我很困惑地遇到了具有以下行的代码:extern"C"staticvoid*foo(int*a){returnfoo1(a);}为什么这不会产生任何错误? 最佳答案 以下内容也编译并执行与您的行相同的操作:extern"C"{staticvoid*foo(int*a){returnfoo1(a);}}static意味着foo()将只在文件范围内可用,当它出现时它会覆盖extern"C"到联动。通常,extern"C"会影响链接器在导出时使用的函数的名称,以便在链接整个程序时可以从其他目标文件调用

c++ - 带有 C++ 模板的虚假 "use of local variable with automatic storage from containing function"?

以下代码无法在g++7.2.0中编译templateclassRequest{intcontent=0;public:friendvoidsetContent(inti,void*voidptr){Request*ptr=(Request*)voidptr;ptr->content=i;}intgetContent(){returncontent;}};intmain(){Requestreq;setContent(4,&req);returnreq.getContent();}有错误test.cpp:Ininstantiationof‘voidsetContent(int,void*

c++ - dynamic_cast vs static_cast 无效*

在下面程序的最后两行中,static_cast和dynamic_cast表现不同。据我了解,dynamic_cast的结果始终解析为完整对象的地址。所以它以某种方式使用了RTTI。谁能解释一下编译器如何使用RTTI来区分两者。#includeusingnamespacestd;classTop{protected:intx;public:Top(intn){x=n;}virtual~Top(){}friendostream&operator(&b)(&b);cout(p)(p)可能的输出:https://ideone.com/WoX5DI281,2,3,40xbfcce60410xbf

Java SE 封装、包、static关键字和代码块

1.封装1.1封装的概念面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互1.2封装之访问限定符一般我们封装用到的访问限定符:pritaveclassStudent{privateStringname;privateintage;publicvoidexam(){System.out.println(this.name+"正在考试中");}}publicclassMain{publicstaticvoidmain(String[]