目的是std::make_pair什么?
为什么不std::pair<int, char>(0, 'a')呢?
这两种方法有什么区别吗?
template< class T >
class Foo {
public:
  Foo( T t ) { }
};
int main () {
  int i = 0;
  Foo f( i );
}
在上面的代码中,编译器抱怨在'f'之前缺少模板参数.我理解从构造函数的参数中推导出类的模板参数不是标准的一部分,但我的问题是为什么?编译器是否具有隐式实例化Foo<int>和调用其构造函数所需的所有信息?
编辑要清楚的是我打电话与构造int(而不是一个short,long,void*,等)
我一直听到人们抱怨C++没有垃圾收集.我还听说C++标准委员会正在考虑将其添加到该语言中.我担心我只是没有看到它的意义...使用智能指针的RAII消除了它的需要,对吧?
我对垃圾收集的唯一经验是在几台便宜的80年代家用电脑上,这意味着系统每隔一段时间就会冻结几秒钟.我确信它从那时起已有所改善,但正如你可以猜到的那样,这并没有让我对此持高度评价.
垃圾收集为经验丰富的C++开发人员提供了哪些优势?
在我的理解中,存在的唯一理由std::make_pair,并std::make_tuple是,你不必自己写的类型,它们会自动推导.在C++ 1z中,我们对类模板进行了模板参数推导,这使我们可以简单地编写
std::pair p(1, 2.5); // C++1z
代替
auto p = std::make_pair(1, 2.5); // C++11/14
情况std::tuple类似.这导致以下问题:在C++ 1Z,有一种情况,其有利于使用std::make_pair和std::make_tuple替代使用的构造std::pair和std::tuple?
请考虑纯C++ 1z代码(即不需要向后兼容C++ 14)并假设每个人都熟悉这个C++ 1z特性.
考虑以下课程:
template<typename T1, typename T2>
class Pair
{
     public:
         T1 First;
         T2 Second;
         Pair(const T1 &First, const T2 &Second) : First(First), Second(Second) { }
}
c ++中不允许以下内容:
auto p = Pair(10, 10);
为什么不允许这样做?类型可以从构造函数调用中完全确定.
我知道有一些解决方法,如:
template<typename T1, typename T2>
Pair<T1, T2> MakePair(const T1 &First, const T2 &Second)
{
    return Pair<T1, T2>(First, Second);
}
但为什么需要呢?为什么编译器不能像从函数模板那样从参数中确定类型?你可能会说它因为标准不允许它,所以为什么标准不允许呢?
编辑:
对于那些说这是一个例子的人,为什么不允许这样做:
template<typename T1, typename T2>
class Pair
{
     public:
         T1 First;
         T2 Second;
         Pair(const T1 &First, const T2 &Second) : First(First), Second(Second) { }
         Pair(const T2 …我在下面用一个简单的代码复制了我遗漏的东西.
B类拥有A类作为成员并使用相同的类型名称.
我想避免复制这些模板,以便在main()中我可以调用类似B b(a,3.0)的东西来重用A中的模板.这可能吗?
#include <iostream>
#include <vector>
template<int N, typename T=double>
struct A
{
    A(T val) : vecA(N, val) {}
    void print() { for (auto i : vecA) std::cout << i << ";"; }
    std::vector<T> vecA;
};
template<int N, typename T>
struct B
{
    B(const A<N,T> & in, T scal) : a(in), scalB(scal) {}
    void print() { a.print(); std::cout << " | " << scalB << std::endl; }
    A<N,T> a;
    T scalB;
};
int main()
{
    A<5,float> …C++ 0x是否具有(或者某个时间点的C++ 0x)构造函数的模板参数推导?在Coming C++(C++ 0x)标准概述中,我看到以下几行:
std::lock_guard l(m);   // at 7:00
std::thread t(f);       // at 9:00
这是否意味着委派make_foo功能模板最终是多余的?
我有:
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
   auto a = -SOME_CONST_MAX;
   vector<auto> myVec {a, a, a, a};
}
我不知道它的类型,SOME_CONST_MAX但我想制作一个类型的矢量-SOME_CONST_MAX.我认为vector<auto>它会起作用,因为它会从类型中推断出来a.
我正在运行这些错误:
g++ -std=c++14 main.cpp
main.cpp:9:9: error: invalid use of ‘auto’
  vector<auto> myVec {a, a, a, a};
         ^
main.cpp:9:13: error: template argument 1 is invalid
  vector<auto> myVec {a, a, a, a};
             ^
main.cpp:9:13: error: template argument 2 is invalid
main.cpp:9:32: error: scalar object ‘myVec’ requires one element in initializer
  vector<auto> …非常基本,但是很难在Google中为我搜索。
我正在在线上进行C ++培训课程,主题是STL。在这种情况下vector。
是否可以在vector不指定类型的情况下实例化a ?
#include <vector>
#include <iostream>
using namespace std;
int main()
{
    vector v1(10, 0);
    cout<<"Size: "<<v1.size()<<endl;
    for(unsigned i = 0; i < v1.size(); ++i)
    {
        cout<< v1[i]<<" ";
    }
    cout<<endl;
    return 0;
}
我认为这是错误的,但是我在整个课程中都看到了这一点,这使我感到困惑。
使用时vector<int> v1(10, 0)它会编译,这就是我的想法。
在使用NetBeans的过程中,但我认为没有配置或参数或任何可以实现该目标的东西,是吗?
我正在编写一个简单的类来在AVR微控制器上设置串行端口。有些参数只有几个有意义的值,例如波特率,奇偶校验类型或停止位数。因此,我想创建一个类型,整数的子集,可以是1或2。我可以创建一个枚举类型:
enum stopBits { one, two };
我不喜欢这种解决方案(拼写出波特率值吗?)。我想出了这个:
template<int vv> struct stopBits {
    static_assert( vv == 1 || vv == 2, "stop bit values can be 1 or 2");
    int value = vv;
};
// usage:
stopBits<2> s;
我更喜欢这种方式,并且喜欢从编译器输出中获得有用的错误消息。我宁愿能够使用复制构造函数来初始化s:
// I'd like to have this
stopBits s = 2;
这样,我将能够编写一个类似以下内容的类:
serial::serial(baudRate b, stopBits s = 1, parity p = none);
在寻找解决方案时,我发现自己陷入了困境:模板参数推导,bounded :: integer库,不能为constexpr的函数参数this和this。可以做到这一点,还是最好投降并继续前进?在此先感谢大家。
我正在使用以下代码来处理某些类型的安全提示,该代码在相关单元之间进行转换...
#include <cmath>
#include <limits>
template <typename T>
class Pascal
{
private:
    T val;
public:
    explicit Pascal(const T val_)
    {
        val = val_;
    }
    operator T() const
    {
        return val;
    }
};
template <typename T>
class dbSPL {
private:
    T val;
public:
    explicit dbSPL(const Pascal<T> p)
    {
        auto infProtect = std::numeric_limits<T>::min();
        val = 20.0 * std::log10( infProtect + p / 20e-6 );
    }
    operator T() const
    {
        return val;
    }
};
我想知道是否可以从构造函数参数类型推断模板类型,而不是显式声明模板参数.例如auto p = Pascal(0.5),而不是打字auto p = …