问题标签 [c++03]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5345 浏览

c++ - c++ 11中的运算符模数变化?

可能重复:
C++ 运算符 % 保证

在 C++ 98/03 中

5.6-4

二元 / 运算符产生商,二元 % 运算符产生第一个表达式除以第二个表达式的余数。如果 / 或 % 的第二个操作数为零,则行为未定义;否则 (a/b)*b + a%b 等于 a。如果两个操作数都是非负数,则余数是非负数;如果不是,则余数的符号是​​ implementation-defined

在 C++ 11 中:

5.6 -4

二元 / 运算符产生商,二元 % 运算符产生第一个表达式除以第二个表达式的余数。如果 / 或 % 的第二个操作数为零,则行为未定义。对于整数操作数,/ 运算符产生代数商,其中任何小数部分被丢弃;81 如果商 a/b 可以用结果类型表示,则 (a/b)*b + a%b 等于 a。

如您所见,缺少为符号位定义的实现,它会发生什么?

0 投票
4 回答
2956 浏览

c++ - isSet() 或 operator void*() 或显式 operator bool() 或其他什么?

检查是否设置了值的函数的最新技术是什么?

例如,下面的迭代器解析单元格。一些单元格包含一个值,其他单元格是空的。

最方便的方法是什么?

思考:

  1. 我的老板不明白isset()=> 改名为isSet()
  2. empty()更多的是关于容器收集,而不仅仅是一个单元格:(
  3. operator void*似乎是合乎逻辑的方式,但在 C++11 流中已弃用
  4. explicit operator尚不支持(我的代码必须与旧编译器兼容)

我在读:

0 投票
1 回答
105 浏览

c++ - 模板类型宏参数中的括号,我不能使用可变参数宏

可能重复:
宏中使用的模板参数有问题

我试图找出一种方法来让它工作而不改变结构INHERIT

问题是调用INHERIT包含逗号。

我正在尝试支持较旧的编译器,因此不能选择可变参数宏和模板别名。有没有什么办法解决这一问题?

0 投票
2 回答
919 浏览

c++ - 初始化作为类的私有成员变量的容器

我有一个list<string> myList作为我班级的私有属性。该列表的内容在编译时是已知的并且是恒定的。是否有任何紧凑的方法(在 C++03 中)来初始化它的值?我只能这么想:

我想要这样的东西:

0 投票
2 回答
1380 浏览

c++ - 在 C++03 中将字符串转换为 int

可能重复:
如何在 C++ 中将字符串解析为 int?

在 C++03 中有多种方法可以将字符串转换为 int。到目前为止我发现的最好的是:

这个解决方案的问题是它接受“12monkeys”并毫不犹豫地将其转换为12。在这种情况下,是否有一些简单的方法可以检查并输出“转换失败”?

请注意,我已经尝试过 atoi()、atol() 和 strtol(),但如果失败则返回 0 的事实是徒劳的。我怎么知道字符串是否不是“0”?也没有范围检查(strtol() 除外)。没有提到那里也存在“12monkeys”问题。

0 投票
2 回答
145 浏览

c++ - 使用不同的 C++ 环境创建 DLL

我有一个正在构建的库,它的目标是链接到主解决方案的 DLL。

这个新的 DLL 相当复杂,我想利用 C++11 的特性,而链接它的程序肯定不会。事实上,主程序目前是使用 VS2008 和 VS2010“干净”构建的(我认为 GCC 4.3 for linux?)。

我的建议:

使用 VS2012 作为 IDE,使用 Intel C++ Compiler 2013 编译为 .dll/.so - 对于 linux - 据我了解,这基本上是机器形式(如 .exe)。

虽然我熟悉使用 C++ 解决问题,但我对编译/链接等基础知识并不流利。因此,我想问问社区是否

  1. 这个有可能
  2. 如果可能的话,它有多容易(就像我描述的那样简单?)/在此过程中我会遇到哪些陷阱或问题(是否值得)?

我预计的关注领域:

  • 运行时库——我希望这会成为阻碍这项工作的因素。我对它们/它们如何工作一无所知,除了它们可能是一个问题。
  • 标准库实现差异 - 是否归结为 DLL 形式是否重要?
  • 线程冲突 - dll 线程和主程序线程从不修改相同的数据,实际上主程序的线程之一将调用 DLL 函数。

奖励:虽然以上是我希望采用的路线,但我理想情况下希望将此代码打开以进行智能感知、一般查看等(本质上是让它成为主要解决方案中的一个项目)。有没有办法指定不同的运行时库/编译器?这可以做到吗?

编辑:这个奖励部分的主要原因是消除如果主程序和这个库是分开构建的,就会出现必要的“版本控制”冲突。

注意:我不是为了更新而使用 C++11 - 强类型枚举和跨平台线程代码将为库带来巨大的好处。

0 投票
1 回答
189 浏览

c++ - const_casting 可变字段安全吗?

考虑以下 C++03 程序:

似乎有效,但它肯定安全吗?

我只是在修改一个mutable字段,但是完全剥离了它的const上下文让我感到紧张。

0 投票
1 回答
831 浏览

c++ - 检查 C++03 上是否为 const

如何检查一个对象是否是没有 C++11 的 const std::is_const?据我所知,我不应该是const_cast一个被声明为const的对象

0 投票
1 回答
7221 浏览

c++ - 更改或检查 std::ofstream 的打开模式

在一些使用 执行大量文件 i/o 的代码中std::ofstream,我正在缓存流以提高效率。但是,有时我需要更改文件的打开模式(例如追加与截断)。这是一些类似的模拟代码:

有谁知道:

  • 有没有办法改变openmode的ofstream
  • 如果没有,有没有办法找出当前openmode的 anofstream是什么,以便我可以仅在必要时关闭并重新打开它?
0 投票
2 回答
2421 浏览

c++ - 使用友元类的单例实现 (C++)

我在尝试创建单例时想出了这个。示例:(我正在尝试制作MySelf一个线程安全且不使用双重检查锁定的单例)

现在我可以轻松地使用它,

我不想要延迟初始化,因为我要创建的类将从头到尾都存在。但是这个线程安全吗?(据我所知,这似乎还可以)

如果这没问题,那么我应该使用这样的通用编程,

所以我也可以将它与任何其他类一起使用。我只需要添加friend class GenericSingleton<MySelf>;到所需的 sigleton(例如添加到 MySelf 类)。

这种实现会引起麻烦吗?我实际上正在创建一个库。一些单例将被导出,而有些则不会。另外,如果这不是一个库,而只是另一个应用程序怎么办?

- 编辑 -

所以现在我必须这样做(因为我使用的是仍然不支持 C++11 的 VC++),

并告诉用户使用该功能一次,然后将其缓存以供使用。(或者我也可以将函数重命名为Initialize()并创建另一种方法来仅返回引用而无需任何锁定或创建。)那么mymutex应该在哪里?它应该在哪里初始化?