c++98相关内容
有人告诉我,C++98是在被正式标准化为ISO/IEC 14882:1998之前根据ANSI编写的。 我知道ANSI与C有关,但我似乎找不到多少证据来证明“ANSI C++”这个短语非常准确。 “ANSI C++”是对C++98的好描述吗? 对于C++标准的后续版本,“ANSI C++”是一个好的描述吗? 推荐答案 最初,在‘89年,C++的标准化工作由ANSI X3J1
..
图书馆https://github.com/c42f/tinyformat/blob/2f9335afd9941688e42d60cae5166b9f0600b2d1/tinyformat.h#L1104-L1116,使用这个很棒的技巧在 C++ 98 上做“可变参数"模板: inline void printfln(const char* fmt){格式(std::cout,fmt);std:
..
我曾尝试使用 此建议 来执行静态断言,但如果我执行此操作,我不会收到编译错误在模板的方法中使用它. 示例如下: #include #define STATIC_ASSERT(expr, msg) \{ \char STATIC_ASSERTION__##msg[(expr)?1:-1];\(void)STATIC_ASSERTION__##msg[0];\}模板
..
为了实现一个线程类(在C++98和Windows.h中).我有这样的事情: Thread::Thread(_beginthreadex_proc_type fn){m_raw = fn;m_args = 0;m_handle = 0;m_id = 0;} 上面的代码工作正常,它接受一个不接收参数的函数,下一个代码它的函数被一个新线程调用: void Thread::Join(){m_hand
..
假设我有一个常量值(可能是某种枚举类型).假设我有很多类 A、B、D 等. 我可以拥有这样的东西吗? CanInstanceOfA;//这将是A类型C 2anInstanceOfB;//这将是B类型C 3 ;anInstanceOfD;//这将是D类型 那么,是否可以在编译时根据一个常数来选择一个类? 一般的问题是我试图根据一个表选择一个函子,其中索引是一个枚举.如果可能,我想避免
..
让我们考虑一个代码 标题: 类 uid{民众:uid () {++i;}静态 int i;};类 foo{民众:const 静态 uid id;} 来源: static int uid::i = 0; 头文件可以包含在多个源文件中,在编译器单元和库之间共享. 是否保证 foo::id 只有一个实例,foo::id::id() 将在运行时调用一次-时间,最重要的是,foo::id
..
我正在尝试重构代码,以便使用前向声明而不是包含许多标头.我对此并不陌生,并且对boost :: shared_ptr有疑问. 说我有以下界面: #ifndef I_STARTER_H_#定义I_STARTER_H_#includeIStarter类{上市:虚拟〜IStarter(){};虚拟运算符()()= 0;};typedef boost
..
#include#include使用命名空间std;int main(void){向量一种;a.push_back(3);向量b = move(a);cout <b:<b.data()<endl;cout <a:<a.data()<endl;返回0;} 输出(在c ++ 98中): b:0x7f9a82405730a:0x7
..
我正在尝试移植此答案:将N个公式替换为一个(字符串插值)到标准的c ++ 98实现. C ++ 14版本: #include#include#include#include#include使用命名空间std;int main(){map插值= {{"F" s,
..
我偶然发现了一些非常旧的代码,该代码具有一个带有已定义的副本分配运算符的类,该运算符将其参数用作const引用,但也不会检查自赋值,因此本质上是: 结构A{int q;A():q(3){}A&运算符=(const A& a){q = a.q;返回* this;}}; 将 A 的实例分配给自身时,该赋值运算符的行为是什么?我认为这会导致问题,因为它“破坏"了参数的稳定性,任何编译器都可以假设参
..
我有一个 std :: vector 变量.我也有两个类型T的变量,第一个代表我要插入的向量中的值,第二个代表要插入的值. 所以可以说我有这个容器: 1,2,1,1,2,2 根据上面的定义,两个值分别为2和3.然后,我想编写一个函数,将容器更新为包含以下内容: 1,2,3,1,1,2,3,2,3 我正在使用c ++ 98和boost.我可以使用哪些std或boost函数
..
我有一个学校作业,应该使用符合C ++ 98的代码编写.如何强制g++仅接受遵循此标准的代码? -std=c++98可以解决问题,还是我需要添加其他标志? 解决方案 每 GCC有关标准的文档 : 原始ISO C ++标准已发布为ISO标准(ISO/IEC 14882:1998),并于2003年发布了技术勘误(ISO/IEC 14882:2003)进行了修订.这些标准分别称为C ++
..
可能重复: std :: vector向下调整大小 如果我 resize()和 std :: vector 的大小小于其当前大小,该向量是否有可能分配新的内存? / p> 出于性能原因,这对我来说很重要。 解决方案 不, 调整大小将永远不会重新分配。 如果容器缩小,所有未删除的元素的迭代器,指针和引用在调整大小后仍然有效,并且引用的是调用前它们所引用的相同元素。
..
我收到一个奇怪的错误,怀疑与我的系统配置有关。我正在使用g ++ --version = g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.4)5.4.0 20160609 编译/链接普通的c ++程序。 默认语言标准记录为c ++ 98,但是即使指定了-std = c ++ 98选项,我仍在输出.o文件中看到c ++ 11符号。。这是我的test.cpp: #includ
..
有没有一种方法可以让g ++在编译时检查C ++ 98语法,但同时又像没有给出 -std = 一样进行编译?我的目标是确保我的源代码保持C ++ 98,但我不想阻止g ++使用任何更新的优化或技巧。目前,我编译了两次projet,一次是 CXXFLAGS = -std = c ++ 98 ,最后一次是空的 CXXFLAGS 发布。 它看起来像 gcc 5 将具有 -Wc90-c99-comp
..
我最近遇到了一个问题,需要将用lambda表达式编写的C ++ 11代码集成到仅支持C ++ 98编译器的旧代码库中。我想出了lambda的两个等效项,例如Macro,函子或函数指针。但是当用捕获翻译lambda时,它们似乎都受到限制。例如,一个带有回调的简单通用函数: template void ForEachObject(Fn fn) { for(uint
..
在C ++ 11中,要确定一个类是否具有成员函数 size ,可以定义以下测试助手: template struct has_size_fn { typedef char(& yes)[1]; typedef char(& no)[2]; 模板静态是检查(decltype(& C :: size)); 模板
..
我已经读到,在 std :: vector 的末尾添加项目的时间复杂度是摊销常量,并在 std :: deque 是常量。由于这两个容器都有一个随机访问迭代器,因此在任何索引处访问元素都是常量。如果这些事实有误,请告诉我。我的问题是访问 std :: vector 或 std :: deque中的元素是常量,那么为什么通过擦除O(n)删除元素的时间复杂度为何?答案之一此处此处表示删除元素通过擦除为
..
在C ++中初始化 static 数据成员的正确方法是什么?我也对它从C ++ 98到C ++ 11到C ++ 14的变化感兴趣。 这里是一个例子: // bufferedOutput.h 类BufferedOutput { //静态成员声明。 静态长字节数; }; // bufferedOutput.cpp long BufferedOutput :: by
..
我如何实现下面的功能以将Value的向量转换为Container?我想断言values的并非所有成员都是同一类型,即向量是否包含字符串和整数的混合.这是因为该函数的返回值是std::vector或std::vector. typedef boost::variant Value; typedef boost::varia
..