c++98相关内容

什么是ANSI C++&Quot;?

有人告诉我,C++98是在被正式标准化为ISO/IEC 14882:1998之前根据ANSI编写的。 我知道ANSI与C有关,但我似乎找不到多少证据来证明“ANSI C++”这个短语非常准确。 “ANSI C++”是对C++98的好描述吗? 对于C++标准的后续版本,“ANSI C++”是一个好的描述吗? 推荐答案 最初,在‘89年,C++的标准化工作由ANSI X3J1 ..
发布时间:2022-04-20 11:06:33 C/C++开发

如何用宏做static_assert?

我曾尝试使用 此建议 来执行静态断言,但如果我执行此操作,我不会收到编译错误在模板的方法中使用它. 示例如下: #include #define STATIC_ASSERT(expr, msg) \{ \char STATIC_ASSERTION__##msg[(expr)?1:-1];\(void)STATIC_ASSERTION__##msg[0];\}模板 ..
发布时间:2022-01-11 19:27:25 C/C++开发

C++98中如何处理多个不同类型的参数?

为了实现一个线程类(在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 ..
发布时间:2021-09-25 19:22:31 C/C++开发

我可以在编译时使用一个常数来选择一个类,可能使用模板吗?

假设我有一个常量值(可能是某种枚举类型).假设我有很多类 A、B、D 等. 我可以拥有这样的东西吗? CanInstanceOfA;//这将是A类型C 2anInstanceOfB;//这将是B类型C 3 ;anInstanceOfD;//这将是D类型 那么,是否可以在编译时根据一个常数来选择一个类? 一般的问题是我试图根据一个表选择一个函子,其中索引是一个枚举.如果可能,我想避免 ..
发布时间:2021-09-04 20:47:04 C/C++开发

c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?

让我们考虑一个代码 标题: 类 uid{民众:uid () {++i;}静态 int i;};类 foo{民众:const 静态 uid id;} 来源: static int uid::i = 0; 头文件可以包含在多个源文件中,在编译器单元和库之间共享. 是否保证 foo::id 只有一个实例,foo::id::id() 将在运行时调用一次-时间,最重要的是,foo::id ..
发布时间:2021-08-30 18:36:06 C/C++开发

转发声明和shared_ptr

我正在尝试重构代码,以便使用前向声明而不是包含许多标头.我对此并不陌生,并且对boost :: shared_ptr有疑问. 说我有以下界面: #ifndef I_STARTER_H_#定义I_STARTER_H_#includeIStarter类{上市:虚拟〜IStarter(){};虚拟运算符()()= 0;};typedef boost ..
发布时间:2021-04-19 21:00:33 C/C++开发

什么是c ++ 98中的move()?

#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 ..
发布时间:2021-04-19 19:59:26 C/C++开发

从C ++ 14到C ++ 98的端口字符串插值

我正在尝试移植此答案:将N个公式替换为一个(字符串插值)到标准的c ++ 98实现. C ++ 14版本: #include#include#include#include#include使用命名空间std;int main(){map插值= {{"F" s, ..
发布时间:2021-04-19 19:51:05 C/C++开发

具有const ref参数的自赋值行为

我偶然发现了一些非常旧的代码,该代码具有一个带有已定义的副本分配运算符的类,该运算符将其参数用作const引用,但也不会检查自赋值,因此本质上是: 结构A{int q;A():q(3){}A&运算符=(const A& a){q = a.q;返回* this;}}; 将 A 的实例分配给自身时,该赋值运算符的行为是什么?我认为这会导致问题,因为它“破坏"了参数的稳定性,任何编译器都可以假设参 ..
发布时间:2021-04-19 19:37:43 C/C++开发

将多个值插入向量

我有一个 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函数 ..
发布时间:2021-04-15 20:47:20 C/C++开发

在gcc中执行C ++ 98标准

我有一个学校作业,应该使用符合C ++ 98的代码编写.如何强制g++仅接受遵循此标准的代码? -std=c++98可以解决问题,还是我需要添加其他标志? 解决方案 每 GCC有关标准的文档 : 原始ISO C ++标准已发布为ISO标准(ISO/IEC 14882:1998),并于2003年发布了技术勘误(ISO/IEC 14882:2003)进行了修订.这些标准分别称为C ++ ..
发布时间:2020-11-12 23:44:20 C/C++开发

当新大小小于当前大小时,std :: vector :: resize()是否会重新分配?

可能重复: std :: vector向下调整大小 如果我 resize()和 std :: vector 的大小小于其当前大小,该向量是否有可能分配新的内存? / p> 出于性能原因,这对我来说很重要。 解决方案 不, 调整大小将永远不会重新分配。 如果容器缩小,所有未删除的元素的迭代器,指针和引用在调整大小后仍然有效,并且引用的是调用前它们所引用的相同元素。 ..
发布时间:2020-09-27 22:38:57 C/C++开发

gcc使用c ++ 11标准,即使明确指定了98

我收到一个奇怪的错误,怀疑与我的系统配置有关。我正在使用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 ..
发布时间:2020-09-27 22:34:07 C/C++开发

g ++标志仅检查语法?

有没有一种方法可以让g ++在编译时检查C ++ 98语法,但同时又像没有给出 -std = 一样进行编译?我的目标是确保我的源代码保持C ++ 98,但我不想阻止g ++使用任何更新的优化或技巧。目前,我编译了两次projet,一次是 CXXFLAGS = -std = c ++ 98 ,最后一次是空的 CXXFLAGS 发布。 它看起来像 gcc 5 将具有 -Wc90-c99-comp ..
发布时间:2020-09-27 20:57:53 C/C++开发

Lambda表达式可以降级到C ++ 98吗

我最近遇到了一个问题,需要将用lambda表达式编写的C ++ 11代码集成到仅支持C ++ 98编译器的旧代码库中。我想出了lambda的两个等效项,例如Macro,函子或函数指针。但是当用捕获翻译lambda时,它们似乎都受到限制。例如,一个带有回调的简单通用函数: template void ForEachObject(Fn fn) { for(uint ..
发布时间:2020-09-27 19:51:54 C/C++开发

使用SFINAE检测成员函数

在C ++ 11中,要确定一个类是否具有成员函数 size ,可以定义以下测试助手: template struct has_size_fn { typedef char(& yes)[1]; typedef char(& no)[2]; 模板静态是检查(decltype(& C :: size)); 模板 ..
发布时间:2020-09-27 03:27:09 C/C++开发

移除向量和双端队列的项目的时间复杂度

我已经读到,在 std :: vector 的末尾添加项目的时间复杂度是摊销常量,并在 std :: deque 是常量。由于这两个容器都有一个随机访问迭代器,因此在任何索引处访问元素都是常量。如果这些事实有误,请告诉我。我的问题是访问 std :: vector 或 std :: deque中的元素是常量,那么为什么通过擦除O(n)删除元素的时间复杂度为何?答案之一此处此处表示删除元素通过擦除为 ..
发布时间:2020-09-27 03:06:15 C/C++开发

转换boost :: variant类型的std :: vector

我如何实现下面的功能以将Value的向量转换为Container?我想断言values的并非所有成员都是同一类型,即向量是否包含字符串和整数的混合.这是因为该函数的返回值是std::vector或std::vector. typedef boost::variant Value; typedef boost::varia ..
发布时间:2020-09-22 05:14:54 C/C++开发