草庐IT

static-libstdc

全部标签

c++ - 工厂、unique_ptr 和 static_cast

考虑具有基对象、派生接口(interface)和最终对象的多态类://baseobjectstructobject{virtual~object()=default;};//interfacesderivedfrombaseobjectstructinterface1:object{virtualvoidprint_hello()const=0;templatestaticvoidon_destruction(object*/*ptr*/){std::cout在实际用例中,最终对象是通过插件系统定义的,但这不是重点。请注意,我希望能够在销毁对象时调用on_destruction(请参阅

c++ - 如何设置 Clang 以使用 MinGW libstdc++

我一直在尝试在Windows上设置Clang。到目前为止,我幸免于使用VisualStudio和CMake进行构建,并遇到了一些其他的惊喜。但事实证明,Clang没有自带C++stdlib实现,所以我决定使用GCC4.7.0为MinGW构建的libstdc++。首先,我将搜索路径添加到我的HeaderSearchOptions。headeropts->AddPath(path,clang::frontend::IncludeDirGroup::CXXSystem,true,false,false);路径正是header所在的位置-我从Windows资源管理器中复制并粘贴了它(然后将反斜

c++ - 仅在实例化时使用 `static_assert` 使类模板特化无法编译的安全、符合标准的方法?

假设我们想要制作一个模板类,它只能用数字实例化,否则不能编译。我的尝试:#includetemplatestructOnlyNumbers{public:structC{};static_assert(std::is_same::value,"Tisnotarithmetictype.");//OnlyNumbers*ptr;};templatestructOnlyNumbers>>{};structFoo{};intmain(){OnlyNumbers{};//Compiles//OnlyNumbers{};//Error}Livedemo-所有三个主要编译器似乎都按预期工作。我知道

c++ - 随应用程序一起运送 libstdc++.so.6

我想为我的应用程序使用gcc4.8.1(需要libstdc++.so.6.0.18),但是客户只有libstdc++.so.6.0.13。我使用-static-libgcc-static-stdlibc++有一段时间了,但我的应用程序包含几个动态链接库和一个主应用程序。这意味着在编译每个动态库时,他们必须静态编译标准库,这是多余和浪费的。我只想随我的产品一起发布我选择的标准库,但是每次我在像他们这样的环境中运行我的应用程序时,它总是加载错误的标准库。无论我做什么,它都更喜欢/usr/lib64/版本(它似乎优先于LD_LIBRARY_PATH)。约束:我不能强制他们升级到新的标准库。我

c++ - 二元运算符声明的“static”关键字

在C++中,当LHS是被声明的类时,二元运算符可以被一个或两个运算符覆盖。如果用两个参数声明,则必须是非成员函数。在此代码中,两个声明是相同的。classMyClass{public:MyClassoperator+(constMyClass&);}MyClassoperator+(constMyClass&,constMyClass&);有没有理由不能将后者作为静态成员函数来完成?像这样classMyClass{public:staticMyClassoperator+(constMyClass&,constMyClass&);}这将使编写流输入/输出运算符更容易(我知道您可以使用f

c++ - consteval 会允许在函数参数上使用 static_assert 吗?

目前您不能使用static_assert来验证constexpr函数的参数,即使对它的所有调用确实都是constexpr。这是有道理的,因为编译器仍然必须创建此函数的非constexpr实例,以防其他模块尝试调用它。遗憾的是,即使函数是static或在匿名命名空间中也是如此。但是,C++20将引入一个新关键字consteval,它类似于constexpr,但它不允许以非constexpr方式调用函数。在这种情况下,编译器可以确定函数参数在编译时总是已知的。因此,理论上应该可以使用static_assert来验证它们。问题是:标准允许吗?例子:#includeconstevalcharo

C++11 static_assert : Parameterized error messages

在mypreviousquestion我想使用static_assert将模板参数限制为特定的子类型。问题回答完毕,归档代码如下:templatestructX{static_assert(std::is_base_of::value,"TmustbederivedfromY!");};现在,我想让错误信息更简洁。即,我想说明哪种类型违反了此约束。例如,如果类A不是来自Y有人实例化了X,则错误消息应打印“类型参数必须从Y派生,但A不是”。这是否可以通过标准库以某种方式实现?我看到两个挑战:在编译时不使用boost::mpl组装字符串检索实例化T的类型的名称。该名称应该有意义,最好与违规

c++ - libc++ 和 libstdc++ 之间的 istream eof 差异

以下(玩具)程序在链接到libstdc++和libc++时返回不同的东西。这是libc++中的错误还是我不明白istreameof()是如何工作的?我已经尝试在linux和macosx上使用g++运行它,在macosx上使用clang,有和没有-std=c++0x。我的印象是eof()在尝试读取(通过get()或其他方式)实际失败之前不会返回true。这是libstdc++的行为方式,而不是libc++的行为方式。#include#includeintmain(){std::stringstreams;s 最佳答案 编辑:这是由于旧

c++ - static const 成员变量初始化

看起来我可以初始化一个POD静态常量成员,但不能初始化其他类型:structC{staticconstinta=42;//OKstaticconststringb="hi";//compileerror};为什么? 最佳答案 类定义中的语法initializer只允许用于整型和枚举类型。对于std::string,它必须在类定义之外定义并在那里初始化。structC{staticconstinta=42;staticconststringb;};conststringC::b="hi";//inoneofthe.cppfilesst

c++ - 头文件中的 `static` , `extern` , `const`

//a.hexternintx1;staticintx2;intx3;staticconstintx4;classA{public:staticconstintx5=10;};a.h会被多个.cpp文件包含,我的问题是:1.x1只是一个声明,不是吗?所以它的定义应该在那些.cpp文件之一中完成,对吧?2.x2是一个定义,对吧?我曾经认为staticint和externint一样也是一个声明,但我错了。x2将仅在a.h中可见?3.如果a.h包含在多个.cpp文件中,x3会被定义多次,所以x3会导致编译错误,对吧?4.x4是一个定义,对吧?5.这里在A类中,x5是一个声明,是的。但是x4呢