我知道什么是仿函数以及何时将它们与stl algos一起使用.但不明白他在这个主题中的意思:
任何人都可以解释什么是什么std,什么std::bind时候应该使用,新手的一些例子?
这是代码:
template <typename T>
struct A
{
template <typename U>
struct B;
};
template <typename T> template <> // 0_o
struct A<T>::B<int> {};
Run Code Online (Sandbox Code Playgroud)
我知道我不能这样做,但我更有兴趣知道逻辑上为什么我不能专门化嵌套模板成员而不专门封装类模板?
我很感激任何有关逻辑解释的帮助:)
Andrei Alexandrescu的回答:"没有特别的理由 - 这只是一种语言规则."
Hya Gurus,
我已经学习了8到10个月的c ++,并且想开发一个软件或小应用程序(我自学使用一些书籍)所以只考虑我作为C++入门级程序员.因为我不知道win32等用于GUI开发我可以使用一些图书馆.我知道大多数c ++特性,数据结构,算法,并阅读了一些c ++书和scott meyer的有效c ++.
但问题是我无法整合我的所有知识来构建软件,我认为我是一个特殊的编码器.当我看到甚至小的模拟或小的应用程序代码我有时理解代码(有时不是因为仅通过查看代码来理解它们很难)但我发现第4 - 7页的代码甚至如此之大以至于我认为我无法开发应用程序.
例如:如果我想开发我自己的chm阅读器或FTP或任何appz或softw你认为严重编码,我该如何开发它?然后我发现自己完全迷失了,只需开始键入代码,我知道将永远无法开发它.(我觉得0%自信)
所以,我想知道程序员喜欢你怎么样才能学会开发认真的应用程序,只有在用c ++钻孔后,我还需要其他书来学习如何开发软件吗?或者成为认真的应用程序开发人员的过程是什么?
非常感谢任何帮助.
PS(Impotant):我很高兴你能告诉我你在学习C++之后如何成为认真的开发者,你做了什么等等.以及对我的任何个人建议.
编辑:
我不知道UML或软工程,我需要学习它们吗?
非常感谢再次))
我正在努力理解什么是不确定多项式时间问题和NP完全问题.我理解多项式时间可解决的问题,并在维基百科中看到NP问题.在阅读了这篇文章后,我试着想一些示例问题.据我了解,深度优先搜索的是无向的NP完全,因为每个决策都可以做出非决定性的(即如果我做出了错误的决定,我可以尝试其他选择)如果图表很大(cit是一个如果图形尺寸很小,则为多项式.)
任何人都可以用简单的例子简单地解释所有这些NP术语,而不需要使
这是我能想出的最简单的例子来重现问题.
template<class T>
struct X
{
static void foo()
{
static int z = 0;
[]{ z = 1; }();
}
};
int main()
{
X<int>::foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用MinGW 4.6和4.7,以及Ubuntu中的g ++ 4.6,所有这些都给我链接错误"undefined reference to z".所以现在这让我想知道这是否合法.VC10没问题.
如果X是普通类而不是模板,它可以工作.另外,我认为它与lambdas无关,因为即使我用本地类替换lambda也会出错.
这些天我正在学习STL,我想知道STL容器是否通过引用返回?
例如:
vector.first();
map[key];
*vector.begin();
Or any possible return that ends with element (or value type) of container
Run Code Online (Sandbox Code Playgroud)
例如:
std::vector<int> elements;
elements.push_back(20);
elements[0]=60; // this will also change the value
elements.front() = 23; // even the functions also behave same way like subscript operator
Run Code Online (Sandbox Code Playgroud)
这是所有容器的情况吗?还是有一些要考虑的问题我没有表现出来?
这是我检查类是否具有成员函数的代码begin:
template<typename T> struct has_begin
{
struct dummy {typedef void const_iterator;};
typedef typename std::conditional< has_iterator<T>::yes, T, dummy>::type TType;
typedef typename TType::const_iterator Iter;
struct fallBack{ Iter begin() const ; Iter end() const;};
struct checker : T, fallBack {};
template <typename B, B> struct cht;
template<typename C> static char check(cht< Iter (fallBack::*)() const, &C::begin>*); // problem is here
template<typename C> static char (&check(...))[2];
public:
enum {no = (sizeof(check<checker>(0))==sizeof(char)),
yes=!no};
};
Run Code Online (Sandbox Code Playgroud)
如果我改变的第二个参数cht中check(cht< Iter (fallBack::*)() const, &C::begin>*);来
&checker::begin …
这是我的代码:
class BinaryTree<T>
{
private node<T> Head;
public class node<T>
{
public T Data;
public node<T> right;
public node<T> left;
public node<T> parent;
...
}
...
private void insert(ref T data, node<T> parent, ref node<T> currentChild)
{
...
{
if (currentChild.Data >= data) insert(ref data, currentChild, ref currentChild.right);
else insert(ref data, currentChild, ref currentChild.left);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面if (currentChild.Data >= data)我得到错误:
运算符'> ='不能应用于'T'和'T'类型的操作数
我该怎么做才能解决这个错误?
请考虑以下代码:
template<class T>
size_t f(T t, size_t& x) { return x++; }
template<class... Args>
void g(Args... args)
{
size_t x = 0;
size_t y[] = { f(args, x)... };
for (size_t i = 0; i < sizeof...(args); i++)
assert(y[i] == i);
}
Run Code Online (Sandbox Code Playgroud)
C++ 11标准保证的断言不会触发吗?为什么或者为什么不?
让我举一个例子:
a = ++a;
据说上面的陈述有不明确的行为(我已经在SO上读过关于UB的文章)
但是根据优先级规则,运算符前缀的++优先级高于赋值运算符=
所以a应先增加,然后再分配给a.所以每个评估都是已知的,为什么它是UB?