问题标签 [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 投票
6 回答
12836 浏览

c++ - “&s[0]”是否指向 std::string 中的连续字符?

我正在做一些维护工作,并遇到了以下情况:

我知道如果它是 std::vector,使用 &s[0] 会是安全的,但这是对 std::string 的安全使用吗?

0 投票
5 回答
3727 浏览

c++ - 使用 std::basic_string 是否合理以 C++03 为目标时作为连续缓冲区?

我知道在 C++03 中,从技术上讲,std::basic_string模板不需要具有连续的内存。但是,我很好奇实际上利用这种自由的现代编译器有多少实现。例如,如果想用来basic_string接收某个 C API 的结果(如下例所示),分配一个向量只是为了立即将其转换为字符串似乎很愚蠢。

例子:

我知道这样的代码可能会稍微降低可移植性,因为它意味着它std::wstring是连续的——但我想知道这使得这段代码多么不可移植。换句话说,编译器如何真正利用非连续内存所允许的自由?


编辑:我更新了这个问题以提及 C++03。读者应该注意,当面向 C++11 时,该标准现在要求它basic_string是连续的,因此在面向该标准时,上述问题不是问题。

0 投票
4 回答
2386 浏览

c++ - C++ 中的默认模板参数

假设我有一个函数模板 StrCompare

现在在主函数中我写了一行

它应该可以工作,因为我们提供了一个默认模板参数,但它没有
编译器给出以下错误
no matching function for call to `StrCompare(char*&, char*&)' 现在详细代码由下式给出

如果我写

编译器给出相同的错误信息。

0 投票
5 回答
792 浏览

c++ - C++03 中的右值

如何判断给定参数是否是 C++03 中的右值?我正在编写一些非常通用的代码,如果可能的话需要参考,否则需要构造一个新对象。我可以重载以采用按值和按引用并让右值返回调用按值函数吗?

还是我有一种非常令人作呕的感觉,这就是右值引用在 C++0x 中的原因?

编辑:

is_rvalue = !(is_reference || is_pointer) ?

0 投票
6 回答
78373 浏览

c++ - 虚函数可以有默认参数吗?

如果我声明一个基类(或接口类)并为其一个或多个参数指定默认值,派生类是否必须指定相同的默认值,如果不是,哪些默认值将在派生类中体现?

附录:我也对如何在不同的编译器中处理这个问题以及在这种情况下对“推荐”实践的任何输入感兴趣。

0 投票
2 回答
3031 浏览

c++ - 使用 boost 创建一个始终返回 true 的 lambda 函数

假设我有一个采用某种谓词形式的函数:

如果我想用一个总是返回 true 的谓词来调用它,我可以定义一个辅助函数:

但是无论如何都可以调用这个函数(可能使用 boost::lambda)而不必定义一个单独的函数?

[编辑:忘了说:我不能使用 C++0x]

0 投票
2 回答
5211 浏览

c++ - C++03中的完美转发

如果你有这个功能

然后尝试用它来调用它,比如说一个右值

为什么不直接将 T 推导出为 const int,使参数成为 const int& 从而可绑定到右值?

0 投票
2 回答
536 浏览

c++ - C++03 和 C++11 之间的未定义行为有什么区别?

新标准与旧标准具有不同的未定义行为。例如,新的排序规则意味着一些以前未定义的算术运算(由于序列点之间的多次写入等原因)现在被定义了。

那么,对于未定义的行为,我们需要重新学习什么?

0 投票
1 回答
179 浏览

c++ - 在 C++03 中返回类似`std::auto_ptr`s 集合的最佳方法是什么?

std::auto_ptr不允许存储在 STL 容器中,例如std::vector. 但是,有时我需要返回多态对象的集合,因此我无法返回对象向量(由于切片问题)。我可以使用std::tr1::shared_ptr并将vector它们粘贴在 .它不考虑所有权。

C++0x 以 的形式为这个问题提供了完美的解决方案std::vector<std::unique_ptr<t>>,但我无法访问 C++0x。

其他一些注意事项:

  • 我无权访问 C++0x,但我有 TR1 可用。
  • 我想避免使用 Boost (尽管如果没有其他选项可以使用)
  • 我知道boost::ptr_container容器(即boost::ptr_vector),但我想避免这种情况,因为它会破坏调试器(内部存储在void *s 中,这意味着很难在调试器中查看实际存储在容器内的对象)
0 投票
3 回答
7197 浏览

c++ - 在 C++03 中将成员函数传递给 for_each(无提升,无 C++11)

下面的“解决方案”可以编译,但这不是我想要的。我想将put成员函数传递给for_each而不是*this。使用 boost不是一种选择。这可以在 C++03 中解决吗?