相关疑难解决方法(0)

在C++ 11中不推荐使用哪些C++习惯用法?

有了新的标准,就会有新的做事方式,而且许多方式比旧方法更好,但旧的方式仍然很好.由于向后兼容的原因,新标准也没有正式弃用.所以剩下的问题是:

旧的编码方式肯定不如C++ 11样式,我们现在可以做些什么呢?

在回答这个问题时,你可以跳过诸如"使用自动变量"之类的显而易见的事情.

c++ c++-faq c++11

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

我对值初始化的尝试被解释为函数声明,为什么不是A a(()); 解决这个问题?

Stack Overflow教给我的很多东西都是所谓的"最令人烦恼的解析",经典地用一条线来证明

A a(B()); //declares a function
Run Code Online (Sandbox Code Playgroud)

虽然这对于大多数人而言,直观地看起来是a类型对象的声明A,将临时B对象作为构造函数参数,它实际上是一个函数a返回的声明A,将一个指针指向一个返回的函数,它B本身不带参数.同样的线

A a(); //declares a function
Run Code Online (Sandbox Code Playgroud)

也属于同一类别,因为它代替一个对象,它声明了一个函数.现在,在第一种情况下,这个问题的通常解决方法是在其周围添加一组额外的括号/括号B(),因为编译器会将其解释为对象的声明

A a((B())); //declares an object
Run Code Online (Sandbox Code Playgroud)

但是,在第二种情况下,执行相同操作会导致编译错误

A a(()); //compile error
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么?是的我非常清楚正确的"解决方法"是将其更改为A a;,但我很想知道()第一个示例中的额外功能是什么,然后在重新应用它时不起作用第二个例子.A a((B()));变通办法是否是写入标准的特定异常?

c++

154
推荐指数
5
解决办法
2万
查看次数

声明中的新C++ 11成员初始化功能是否使初始化列表过时了?

使用C++ 11,我们现在可以在头声明中初始化类成员:

class aClass
{
    private:
        int mInt{100};
    public:
         aClass();
        ~aClass();
};
Run Code Online (Sandbox Code Playgroud)

所以我有点困惑.传统上,构造函数中的初始化列表已用于成员初始化:

aClass::aClass()
: mInt(100)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

声明中的新C++ 11成员初始化功能是否使初始化列表过时了?如果没有,一个优于另一个的优势是什么?什么情况会使声明初始化有利,或初始化列表有利?应该何时使用另一个?

c++ constructor initialization declaration c++11

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

为什么C++ 11有`make_shared`而不是`make_unique`

可能重复:
make_unique和完美转发

为什么C++ 11有make_shared模板,但不是make_unique模板?

这使得代码非常不一致.

auto x = make_shared<string>("abc");
auto y = unique_ptr<string>(new string("abc"));
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

为什么在C++ 14中不推荐使用std :: shuffle方法?

根据std :: shufle上的cppreference.com参考站点,在c ++ 14中不推荐使用以下方法:

template< class RandomIt >
void random_shuffle( RandomIt first, RandomIt last );
Run Code Online (Sandbox Code Playgroud)

为什么我们不再能够在不传递第三个参数的情况下调用以下函数?

std::random_shuffle(v.begin(),v.end()); //no longer valid in c++14
Run Code Online (Sandbox Code Playgroud)

看起来好像不同的功能减速具有默认参数设置.这背后的原因是什么?是否添加了某种替代方案?

c++ deprecated stl-algorithm c++11 c++14

48
推荐指数
5
解决办法
8378
查看次数

如何一次将多个值分配到结构中?

我可以在初始化struct Foo时执行此操作:

Foo foo =  {bunch, of, things, initialized};
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样做:

Foo foo;
foo = {bunch, of, things, initialized};
Run Code Online (Sandbox Code Playgroud)

那么,有两个问题:

  1. 为什么我不能做后者,前者是否只是初始化的特殊构造函数?
  2. 我怎样才能做类似于第二个例子的事情,即在已经初始化之后在一行代码中为结构声明一堆变量?我试图避免必须为具有许多变量的大型结构执行此操作:

    Foo foo;
    
    foo.a = 1;
    foo.b = 2;
    foo.c = 3;
    //... ad infinitum
    
    Run Code Online (Sandbox Code Playgroud)

c c++ struct

38
推荐指数
3
解决办法
6万
查看次数

具有非静态成员初始值设定项的类的C++ 11聚合初始化

是否允许标准:

struct A
{
  int a = 3;
  int b = 3;
};

A a{0,1}; // ???
Run Code Online (Sandbox Code Playgroud)

这个课程仍然是聚合的吗? clang接受此代码,但gcc不接受.

c++ gcc aggregate-initialization c++11 c++14

33
推荐指数
1
解决办法
6519
查看次数

C++ 11交叉编译器/标准库随机分布的可重复性

虽然随机引擎需要在每个编译器上给出相同的数字序列.至少一些随机分布不是,只要求它们满足统计和概率阈值.举个例子:

#include <random>
#include <iostream>

int main() {
  std::mt19937 foo;
  std::uniform_int_distribution<int> bar(0, 1000);

  for (int i=0; i<99; ++i) {
    bar(foo);
  }

  std::cout << bar(foo) << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当根据(我的版本)libstdc ++和89编译时,将针对libc ++编译时打印808.

无论您给出的合规环境如何,哪些标准提供的分配功能(如果有)可以保证产生一致的结果?

c++ random language-lawyer c++11

9
推荐指数
1
解决办法
552
查看次数

关于constexpr模板元编程的例子?

是否有任何例子,模板元编程比新的constexpr更好用?根据我的理解,constexpr和模板元编程都有类似的用途,但模板元编程并不过时.因此,必须有一些示例,其中模板元编程优于constexpr.对此有任何共同的想法将非常感谢,谢谢!

c++ template-meta-programming constexpr c++11

6
推荐指数
1
解决办法
2829
查看次数

C++ throw()优化

根据优化C++,

对于您确定永远不会抛出异常的函数,使用空的异常规范(即,对声明追加throw()).

如果我知道90%的方法都不会抛出异常怎么办?将throw()附加到所有这些方法似乎是非常规和冗长的.如果没有,有什么好处?或者我在这里误解了什么?

c++ optimization throw

5
推荐指数
2
解决办法
710
查看次数