问题标签 [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.
c++ - “&s[0]”是否指向 std::string 中的连续字符?
我正在做一些维护工作,并遇到了以下情况:
我知道如果它是 std::vector,使用 &s[0] 会是安全的,但这是对 std::string 的安全使用吗?
c++ - 使用 std::basic_string 是否合理以 C++03 为目标时作为连续缓冲区?
我知道在 C++03 中,从技术上讲,std::basic_string
模板不需要具有连续的内存。但是,我很好奇实际上利用这种自由的现代编译器有多少实现。例如,如果想用来basic_string
接收某个 C API 的结果(如下例所示),分配一个向量只是为了立即将其转换为字符串似乎很愚蠢。
例子:
我知道这样的代码可能会稍微降低可移植性,因为它意味着它std::wstring
是连续的——但我想知道这使得这段代码多么不可移植。换句话说,编译器如何真正利用非连续内存所允许的自由?
编辑:我更新了这个问题以提及 C++03。读者应该注意,当面向 C++11 时,该标准现在要求它basic_string
是连续的,因此在面向该标准时,上述问题不是问题。
c++ - C++ 中的默认模板参数
假设我有一个函数模板 StrCompare
现在在主函数中我写了一行
它应该可以工作,因为我们提供了一个默认模板参数,但它没有
编译器给出以下错误
no matching function for call to `StrCompare(char*&, char*&)' 现在详细代码由下式给出
如果我写
编译器给出相同的错误信息。
c++ - C++03 中的右值
如何判断给定参数是否是 C++03 中的右值?我正在编写一些非常通用的代码,如果可能的话需要参考,否则需要构造一个新对象。我可以重载以采用按值和按引用并让右值返回调用按值函数吗?
还是我有一种非常令人作呕的感觉,这就是右值引用在 C++0x 中的原因?
编辑:
is_rvalue = !(is_reference || is_pointer) ?
c++ - 虚函数可以有默认参数吗?
如果我声明一个基类(或接口类)并为其一个或多个参数指定默认值,派生类是否必须指定相同的默认值,如果不是,哪些默认值将在派生类中体现?
附录:我也对如何在不同的编译器中处理这个问题以及在这种情况下对“推荐”实践的任何输入感兴趣。
c++ - 使用 boost 创建一个始终返回 true 的 lambda 函数
假设我有一个采用某种谓词形式的函数:
如果我想用一个总是返回 true 的谓词来调用它,我可以定义一个辅助函数:
但是无论如何都可以调用这个函数(可能使用 boost::lambda)而不必定义一个单独的函数?
[编辑:忘了说:我不能使用 C++0x]
c++ - C++03中的完美转发
如果你有这个功能
然后尝试用它来调用它,比如说一个右值
为什么不直接将 T 推导出为 const int,使参数成为 const int& 从而可绑定到右值?
c++ - C++03 和 C++11 之间的未定义行为有什么区别?
新标准与旧标准具有不同的未定义行为。例如,新的排序规则意味着一些以前未定义的算术运算(由于序列点之间的多次写入等原因)现在被定义了。
那么,对于未定义的行为,我们需要重新学习什么?
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 中,这意味着很难在调试器中查看实际存储在容器内的对象)
c++ - 在 C++03 中将成员函数传递给 for_each(无提升,无 C++11)
下面的“解决方案”可以编译,但这不是我想要的。我想将put
成员函数传递给for_each
而不是*this
。使用 boost不是一种选择。这可以在 C++03 中解决吗?