草庐IT

static-libraries

全部标签

c++ - for语句的for-init-statement中的static_assert

是什么阻止编译器编译放置在for语句的for-init-statement中的static_assert?例如:for(static_assert(true,"");false;);//error 最佳答案 Grammatically.for循环是:for(init-statement;conditionopt;expressionopt)statement其中init-statement可以是expression后跟;或simple-declaration。static_assert-declaration不是那些东西,因此它不能

c++ - 需要理解语句 "Accessability is checked statically and not dynamically in C++"

我对静态或动态检查访问说明符感到困惑。据说不会动态检查访问说明符。这是什么意思?这个例子取自不同的posts所以。考虑这个例子示例A:classBase{public:virtualvoidMessage()=0;};classIntermediate:publicBase{//IsMessagemethodvirtualheretoo?isitprivateorpublic?};classFinal:publicIntermediate{voidMessage(){cout现在假设我做这样的事情Final*finalPtr=&final;finalPtr->Message();上面的

C++ std::forward<T> 与 static_cast<T>

据我了解,std::forward(x)相当于static_cast(x).但据我所见,static_cast(x)似乎做同样的事情,如下所示code因此我的问题是为什么std::forward实现为static_cast(x),而不是static_cast(x),如果两者有相同的效果呢? 最佳答案 因为完美转发允许同时传递r值引用和l值引用。这是通过referencecollapsing完成的:T=int-->T&&=int&&T=int&-->T&&=int&&&=int&T=int&&-->T&&=int&&&&=int&&在

c++ - 静态库如何工作? (C/C++)

我知道如何使用和创建它们,但我找不到关于它是如何实现的、函数调用如何发生等等的文本,有人可以帮助我提供这些信息吗?因为我想了解它们,而不仅仅是知道它是什么以及它是如何工作的 最佳答案 您可能知道,当您编译一个源文件时,您会得到一个目标文件。根据您的平台,其扩展名可能是.o或.obj或其他任何内容。静态库基本上是目标文件的集合,有点像.zip文件,但可能未压缩。链接器在尝试生成可执行文件时会尝试解析引用的符号,即找到它们在哪个目标文件(无论是在库中还是其他地方)中定义并链接他们在一起。因此,静态库也可能包含已定义符号的索引,以促进这一

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++ 模板元编程, "static if"解决方法 - 可以改进吗?

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

javascript - 编译嵌入式 SpiderMonkey 程序时出错

好的,所以我使用命令wgethttp://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz下载了SpiderMonkey源代码并将其提取出来。然后我通过执行以下命令成功构建了包含文件和静态库:autoconf2.13./configure--prefix=~/js--disable-shared-js制作安装现在我尝试使用命令g++-I/home/aaditmshah/js/include/js-L/home/aaditmshah/js/lib-lmozjs185-1.0-ldl-lm-ldlhelloworld.cpp-ohe

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