CString s = "test";
std::string ss = "test";
char z[100];
sprintf(z, "%s", ss.c_str()); // z = "test" : OK
char z2[100];
sprintf(z2, "%s", ss); // z2 = "(null)" : OK. undefined behavior is expected
char z3[100];
sprintf(z3, "%s", s); // z3 = "test" : How is this possible ?!
Run Code Online (Sandbox Code Playgroud)
谁能解释一下如何CString正常使用sprintf?
当我们用C编写程序时,我们可能会调用一些用C++编写但有C接口的库.然后,当我们调用这些库时,可能会发生C++异常.所以我的问题是我们如何处理这种情况.从C++开发人员的角度来看,我对这个问题更感兴趣.假设我正在开发一个将由C程序调用的C++库,我应该停止使用异常而不是返回错误代码吗?另一种情况是,如果我已经有一个使用异常的完全开发的C++库,我怎么能以一种只使用错误返回方法的快速方式传输这个库?
请帮我理解这个表达方式:
(dwStreamSizeMax >> 32i64)
Run Code Online (Sandbox Code Playgroud)
我以前从未见过像32i64这样的操作数.谢谢.
我目前正在设计一个接口(Base在下面的例子中),它提供了几个虚拟方法,包括begin()和end()。这两个方法简单地返回相应的迭代器,就像在任何其他集合(如类)中一样。派生类应该实现这些方法并返回它们对迭代器的特定实现。
以下(简化的)示例显示了一个派生类,它使用 aboost::transform_iterator来转换整数的私有内部列表。这个实现只是现实中的一个例子,迭代的“事物”可以是其他东西,迭代器也是如此。
该示例有效,但我有一个问题。对象类型main()并没有隐藏使用的迭代器类型为 的事实TransformIterator。基类将用于某种插件架构,其中每个插件都是一个共享库。插件不应该知道使用哪种类型的迭代器,而应该完全依赖于抽象接口。有没有办法做到这一点?
#include <boost/iterator/transform_iterator.hpp>
#include <iostream>
#include <string>
#include <vector>
template<class Iterator>
class Base
{
public:
virtual Iterator begin() = 0;
virtual Iterator end() = 0;
};
struct toString
{
std::string operator()(int number) const
{
return std::to_string(number);
}
};
typedef boost::transform_iterator<toString, std::vector<int>::iterator> TransformIterator;
class Derived : public Base<TransformIterator>
{
public:
Derived() : ints{132, 3, 6451, 12, 5} {}
TransformIterator begin()
{
return boost::make_transform_iterator(ints.begin(), toString());
} …Run Code Online (Sandbox Code Playgroud) template <class T1, class T2>
class A {};
template <class T1>
class A {};
A<int, int> a;
A<int> b;
Run Code Online (Sandbox Code Playgroud)
此代码生成
错误C2976:'A':模板参数太少
在'A'级的第二次讨论中.
我有一个字符串,这是一个白色空格分隔整数,我想将其转换为整数向量的数组.我的字符串就像:
6 9 17 5 3 4 10 12 7 3 5 10 6 5 0 10 10 10 13 3 6 10 2 11 33 9 14 7 0 8 7 6 38 2 23 8 4 52 7 3 19 12 2 22 3 6 3 1 2 1 5 17 13 5 1 6 0 12 6 9 15 2 22 0 27 2 3 4 7 2 8 2 8 6 11 22 4 9 4 …Run Code Online (Sandbox Code Playgroud)