相关疑难解决方法(0)

为什么不从构造函数推断模板参数?

今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:

template<typename obj>
class Variable {
      obj data;
      public: Variable(obj d)
              {
                   data = d;
              }
};

int main()
{
    int num = 2;
    Variable var(num); //would be equivalent to Variable<int> var(num),
    return 0;          //but actually a compile error
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我明白这是无效的,所以我的问题是为什么不是呢?允许这会产生任何重大的句法漏洞吗?是否存在不希望使用此功能的实例(推断类型会导致问题)?我只是想了解允许函数的模板推理背后的逻辑,但不适用于适当构造的类.

c++ parameters templates inference

101
推荐指数
6
解决办法
2万
查看次数

为什么使用std :: make_*而不是构造函数更好?

有些情况下,与启动STL一些功能make_前缀一样std::make_pair,std::make_shared,std::make_unique等它为什么一个更好的做法是使用它们,而不是简单地使用构造?

auto pair2 = std::pair< int, double >( 1, 2.0 );
auto pair3 = std::make_pair( 1, 2.0 );

std::shared_ptr< int > pointer1 = std::shared_ptr< int >( new int( 10 ) );
std::shared_ptr< int > pointer2 = std::make_shared< int >( 10 );
Run Code Online (Sandbox Code Playgroud)
  • 我只是看到这些函数使代码变得更短,但这就是全部吗?
  • 还有其他优点吗?
  • 这些功能更安全吗?

c++ std c++11

19
推荐指数
2
解决办法
1902
查看次数

我可以在C++中同时分配2个变量吗?

int DFS(a, b,c,d)
{
    first=a+b;
    second=c+d;
    return(first,second);
}

solution, cost_limit = DFS(a, b,c,d);
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?如何?

c++

12
推荐指数
2
解决办法
1938
查看次数

在std :: pair中使用`std :: make_pair`:C++ STL

我注意到很多次,无论什么时候需要为(新)分配值std::pair,都会std::make_pair被使用.但是我没有找到任何make_pair函数的使用,因为我们可以直接将值输入到一对,并根据需要修改它们.例如:

std::pair<int,int> newp;
std::cin>>newp.first>>newp.second;
newp.first = -1;
Run Code Online (Sandbox Code Playgroud)

那究竟是什么功能的使用?

c++ stl std-pair

4
推荐指数
3
解决办法
2505
查看次数

保留对象和对函数内创建的对象的引用

我是 C++ 新手,所以仍在学习指针并习惯使用它们。

我声明了一个对象映射,以便存储用户稍后可以使用标签键访问的对象。

map<string,MyObject*> myMap;
Run Code Online (Sandbox Code Playgroud)

我添加到 myMap 的对象是在我的 main 调用的函数中创建的

void myFunction(){
    ...
    MyObject obj1();
    MyObject* objPtr;
    objPtr = &obj1;
    myMap.insert(pair<string,MyObject*>("xxxx", objPtr));
    ...
    } 
Run Code Online (Sandbox Code Playgroud)

当我执行这个函数时,对象指针完美地插入到 myMap 中,但是在函数执行之后,我丢失了对 obj1 的引用,我猜是因为指针和对象是在函数内部本地创建的,所以我仍然有一个元素“xxx”地图,但我认为后面是一个空参考。

如何全局保存对象和引用?我想在函数中创建这个对象,因为它有一些需要从用户 obj1(m,n) 获取的变量参数。谢谢你的帮助。

c++

3
推荐指数
1
解决办法
3308
查看次数

为什么make_pair &lt;int,int&gt;在C ++ 11中失败?

下面的代码在以C ++ 98编译时可以正常工作,但在C ++ 11上失败。为什么?

#include <iostream>
#include <utility>

using namespace std;

int main()
{
    int u = 1;
    pair<int, int> p = make_pair<int, int>(0, u);
    cout << p.first << " " << p.second << "\n";
}
Run Code Online (Sandbox Code Playgroud)

来自g ++(Debian 8.3.0-6)8.3.0的错误消息是:

foo.cpp: In function ‘int main()’:
foo.cpp:9:45: error: no matching function for call to ‘make_pair<int, int>(int, int&)’
  pair<int, int> p = make_pair<int, int>(0, u);
                                             ^
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地通过从中删除模板说明符make_pair并让编译器自行决定类型来进行编译。但是我有兴趣了解从C ++ 98到C ++ 11的哪些变化,从而使该代码不再兼容。

c++ stl c++11

3
推荐指数
1
解决办法
145
查看次数

标签 统计

c++ ×6

c++11 ×2

stl ×2

inference ×1

parameters ×1

std ×1

std-pair ×1

templates ×1