我对这个程序有一些疑问:
#include <iostream>
#include <type_traits>
#include <functional>
using namespace std;
template <typename T> void foo ( T x )
{
auto r=ref(x);
cout<<boolalpha;
cout<<is_same<T&,decltype(r)>::value;
}
int main()
{
int x=5;
foo (x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
false
Run Code Online (Sandbox Code Playgroud)
我想知道,如果std::ref没有返回对象的引用,那么它会做什么?基本上,有什么区别:
T x;
auto r = ref(x);
Run Code Online (Sandbox Code Playgroud)
和
T x;
T &y = x;
Run Code Online (Sandbox Code Playgroud)
另外,我想知道为什么存在这种差异?为什么我们需要std::ref或std::reference_wrapper什么时候有参考(即T&)?
我是新的C++编程和整个学期来containers举例,如vector,deque,map,等.
什么应该class满足container在C++中称为a 的最低要求?
在C++ 14中,这样的东西是合法的(for lambdas): -
auto l = [](auto x, auto y) { return x+y; };
Run Code Online (Sandbox Code Playgroud)
但是这样的事情仍然不合法: -
auto sum (auto x, auto y)
{
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
我的好奇心是为什么不是第二个添加到标准中的(虽然它应该在C++ 17中有希望添加)?第二个的优点和缺点是什么?
我们每个人都知道,由于它们执行的许多特殊功能以及它们动态增长和减少的能力,我们应该更喜欢所有字符串应用程序的string类C++。什么string是 for characters,vector适用于其他数据类型和类,因为它表现出出色的性能。
但是,是否有任何情况需要我们更喜欢vector<char>(我很少看到)string?
我已阅读,std::vector总是初始化它与它们的对象default values说了一个int很0.即使classes在default constructor调用的地方也应该适用.然而,测试程序显示的结果有点不同: -
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
int i;
A(){};
};
class B
{
public:
int i;
B() = default;
};
template <typename T>
void seev (const vector<T> &v)
{
for (auto &x:v)
{
cout << x.i << ' ';
}
cout << '\n';
}
int main()
{
vector<int> vi(5); // just to show that std::vector always default initializes values …Run Code Online (Sandbox Code Playgroud)