首页 > TAG信息列表 > C98

133: error: in C++98 XXX must be initialized by constructor, not by '{...}'

这样的问题就是你的编译器是否支持C11标准的问题。 C11相对与C98加了不少东西,比如容器的初始化等,如果用C98标准初始化容器,那真的是很爽的。 首先如果是要用VS,可以去下载一个VS2019,也不大,网速只要过得去十几分钟就下载好了,也就打盘王者的事情。 然后如果是用QT的话,首先你的编译器要

Lambda表达式能否降级为C 98

我最近遇到了一个问题,需要将用lambda表达式编写的C 11代码集成到仅支持C 98编译器的旧代码库中.我想出了lambda的两个等效项,例如Macro,函子或函数指针.但是当用捕获翻译lambda时,它们似乎都受到限制.例如一个带有回调的简单通用函数: template <class Fn> void ForEachObject(F

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

我正在尝试将此答案:Replace N formulas to one (string interpolation)移植到标准c 98实现中. C 14版本: #include <algorithm> #include <iostream> #include <iterator> #include <map> #include <string> using namespace std; int main() { map<str

c – std :: namespace中的isnan是什么?更一般地说,什么时候std ::必要,可选或者要避免?

使用Mingw 4.7.2,我有一个因为调用isnan而无法编译的库. 如果我使用std :: isnan,编译器会说“一切都会好的”,而且我确实设法编译了我的文件. 但是,如果我检查here(编辑:但也许我应该检查here :-)),std ::似乎没有必要.如果我添加它,该文件是否可移植? 更一般地说,对于每种情况都有

c – 删除向量和双端队列中项目的时间复杂度

我已经读过,在std :: vector的末尾添加项目的时间复杂度是分摊常量,并且在std :: deque的顶部和底部插入项目是常量.因为这两个容器都有一个随机访问迭代器,因此访问元素任何指数都是不变的.如果我有任何这些事实错误,请告诉我.我的问题是,如果访问std :: vector或std :: deque中的

c – 如何用宏做static_assert?

我曾尝试使用this suggestion来执行静态断言,但如果我在模板的方法中使用它,则不会出现编译错误. 示例如下: #include <iostream> #define STATIC_ASSERT(expr, msg) \ { \ char STATIC_ASSERTION__##msg[(expr)?

c – 使用boost :: variant遍历树节点的模板

这是我遍历节点树的设计: struct Leaf1{}; struct Leaf2{}; struct Leaf3{}; struct Leaf4{}; struct Leaf5{}; typedef boost::variant< Leaf4, Leaf5 > Node3; typedef boost::variant< Leaf2, Leaf3, Node3> Node2; typedef boost::variant< Node2, Leaf1 > Node1

c – 迭代boost :: shared_array

你会如何迭代boost :: shared_array中的项目?你会对它做一个get()并使用原始指针作为迭代器吗?解决方法:由于你已经使用了boost,可能是这样的: #include <boost/shared_array.hpp> #include <boost/range.hpp> #include <iostream> int main() { boost::shared_array<int> arr(n

c – 有效的编程:如何在不编写实际谓词的情况下使用find_if

说我有以下定义: typedef std::vector<std::string> StringVec; typedef std::set<std::string> StringSet; 和以下对象: const StringVec& v const StringSet& s 我想使用find_if来查找s中存在的v中的第一个字符串. 什么是我最好的行动方案?这可以通过绑定一些函数调用来完成,以

c – 为什么在SFINAE期间需要参数中的指针?

为什么我需要*来使检查器成为指针在线 模板< typename C> static yes test(checker< C,& C :: helloworld> *); 为了使编译时间扣除正常工作,输出1 0? 当我删除*时,输出为0 0 #include <iostream> struct Generic {}; struct Hello { int helloworld() { return 0; } }; // SFIN

C 98替代std :: stoul?

我在这里用这段代码遇到了麻烦: unsigned long value = stoul ( s, NULL, 11 ); 这给了我c98的这个错误 error: 'stoul' was not declared in this scope 它适用于C 11,但我需要在C 98上使用它.解决方法:您可以使用cstdlib中的strtoul: unsigned long value = strtoul (s.c_str(

C我应该完全限定我的变量类型吗?

我正在尝试编写最多适合80列的代码行.因此,我想知道完全限定我的变量类型是否真的是强制性的?假设以下实现: //Baz.h namespace loggingapi { namespace attributes { class Baz {}; }} // namespaces // Bar.h namespace loggingapi { namespace attributes { cla

投掷析构函数可由C 98和C 1x编译.有没有更好的办法?

有没有一种干净的方法或解决方法来实现一个可以通过c 98和c 1x编译器编译的抛出析构函数,这些编译器是跨平台的并且不会产生警告? 特定 有一个表示错误代码的遗留类,如果未处理则抛出该错误代码.为此,它使用了一个抛出析构函数. 目标 一个跨平台(g,VC)实现,编译和使用旧的c 98编译器

c – 过滤std :: string的std :: vector

如何生成输出向量,根据输入向量是否以某个子字符串开头来过滤输入向量.我正在使用c 98和boost. 这是我得到的: std::string stringToFilterBy("2"); std::vector<std::string> input = boost::assign::list_of("1")("2")("22")("33")("222"); std::vec

如何在C 11/98中跳过参数

说我有一个功能: void function() { cout << "Hello!" << endl; } 我有一个算法调用一个函数并传递两个参数: template <class F> void my_algorithm(F f) { // ... f(x, y); // ... } 如何通过操作函数或函数对象将函数传递给my_algorithm,而无需手动创建包装器

在C89和C中使用空参数调用宏是否真的是未定义的行为?

考虑以下计划: #include <iostream> #define add(s,m,a) ( s + m + a + 0 ) int main() { std::cout<<add(3,4,5)<<'\n'; std::cout<<add(15,30,)<<'\n'; std::cout<<add(10, , 33)<<'\n'