小编And*_*zos的帖子

std::any std::unique_ptr 不起作用?

请考虑以下 C++20 程序:

#include <any>
#include <memory>

int main() {
  std::any a;
  std::unique_ptr<int> x = std::make_unique<int>(42);
  a.emplace<std::unique_ptr<int>>(std::move(x));
}
Run Code Online (Sandbox Code Playgroud)

我越来越:

test.cc: In function ‘int main()’:
test.cc:7:47: error: no matching function for call to ‘std::any::emplace<std::unique_ptr<int, std::default_delete<int> > >(std::remove_reference<std::unique_ptr<int>&>::type)’
    7 |   a.emplace<std::unique_ptr<int>>(std::move(x));
      |                                               ^
In file included from test.cc:1:
/usr/include/c++/9/any:273:7: note: candidate: ‘template<class _ValueType, class ... _Args> typename std::any::__any_constructible<std::any::_Decay<_ValueType>&, std::any::_Decay<_ValueType>, _Args&& ...>::type std::any::emplace(_Args&& ...)’
  273 |       emplace(_Args&&... __args)
      |       ^~~~~~~
/usr/include/c++/9/any:273:7: note:   template argument deduction/substitution failed:
/usr/include/c++/9/any: In substitution of ‘template<class _ValueType, class …
Run Code Online (Sandbox Code Playgroud)

c++ c++20

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

2d矢量初始化

我放弃了尝试将2d数组传递给函数,其中维度在编译时是未知的.经过一些研究,似乎二维矢量可能是一个很好的替代品.我只是想确认这是声明一个维度totalRows X totalColumns的二维向量的正确方法,初始化每个单元格以包含空格字符:

vector<vector<char> > world(totalRows, vector<char>(totalColumns, ' '));
Run Code Online (Sandbox Code Playgroud)

c++ vector

2
推荐指数
1
解决办法
8309
查看次数

链式"运算符"的优势在于Variadic模板函数?

考虑以下C++代码:

A a = ...;
B b = ...;
C c = ...;

cin >> a >> b >> c;
...
cout << a << b << c;
Run Code Online (Sandbox Code Playgroud)

既然我们有C++ 11可变参数模板函数(我认为)它可以通过以下方式之一实现:

cin.read(a,b,c);
cout.write(a,b,c);

read(cin,a,b,c);
write(cout,a,b,c);

cin(a,b,c);
cout(a,b,c);
Run Code Online (Sandbox Code Playgroud)

链式<<运算符在这些方面有什么优势吗?换句话说-你想,如果他们有他们仍然会用在一开始可变参数模板的功能operator <<operator >>?如果是这样,为什么?

c++ c++11

2
推荐指数
1
解决办法
515
查看次数

C++中的空格11比预处理标记分​​离更多?

在C++ 11 2.5预处理令牌[lex.pptoken]:

如条款16所述,在翻译阶段4期间的某些情况下,空白空间(或其不存在)不仅仅用于预处理标记分​​离.

这指的是哪种情况?

c++ c++11

2
推荐指数
1
解决办法
421
查看次数

C++ 11 prvalue id-expression?

在C++ 11 5.1主表达式中,它指出:

[id-expression]的类型是标识符的类型.结果是由标识符表示的实体.如果实体是函数,变量或数据成员,则结果是左值,否则为prvalue.

什么是作为prvalue的id表达式的示例?

(也就是说,id-expression的一个例子是什么,它引用的是一个不是函数的实体,而不是一个变量,而不是一个数据成员?)

c++ c++11

2
推荐指数
1
解决办法
312
查看次数

使用类型谓词来执行重载决策?

在C++ 14中,假设我有一组N类型模板参数的互斥bool constexpr变量模板:

template<typename T> constexpr bool P1 = ...;
template<typename T> constexpr bool P2 = ...;
.
.
.
template<typename T> constexpr bool PN = ...;
Run Code Online (Sandbox Code Playgroud)

通过互斥,我们的意思是对于任何两个不同的整数ij(in [1..N])以及任何类型T,Pi<T> && Pj<T>都是错误的.

我想定义一个由N函数定义组成的参数的重载函数集,这样一个带有类型为T的参数的函数调用表达式将选择ith函数if Pi<T>为true,否则如果不存在则无法编译Pi:

void f(T such that P1<T>) { defn1; }
void f(T such that P2<T>) { defn2; }
.
.
.
void f(T such that PN<T>) { defnN; }
Run Code Online (Sandbox Code Playgroud)

实现这个的最简单方法是什么?

c++ c++14

2
推荐指数
1
解决办法
77
查看次数

std :: map是通过引用按值引用分配器还是纯粹作为类型使用它?

当a std::map将Allocator作为构造函数中的参数时,它通过引用获取其类模板参数中的类型:

explicit map(const Allocator& alloc);
Run Code Online (Sandbox Code Playgroud)

它是将此引用存储在对象中,还是采用副本(按值存储),还是不执行任何操作,仅将模板参数用作类型?你是怎么决定的?

c++ dictionary allocator c++17

2
推荐指数
1
解决办法
68
查看次数

期间必须是C++ 17 chrono库中的比例专业化?

我显然太愚蠢了,不能使用C++ 17 <chrono>库.编译以下内容......

#include <chrono>
#include <iostream>

int main() {
    using clock = std::chrono::steady_clock;
    using duration = std::chrono::duration<double, std::chrono::seconds>;
    using timepoint = std::chrono::time_point<clock, duration>;
    timepoint t0 = clock::now();
    for (int i = 0; i < 1000; i++) {
        timepoint t = clock::now();
        duration d = t-t0;
        double seconds = d.count();
        std::cout << seconds << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了......

/usr/include/c++/8/chrono:319:16: error: static assertion failed:
                                  period must be a specialization of ratio
      static_assert(__is_ratio<_Period>::value,
                    ^~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c++ c++-chrono c++17

2
推荐指数
1
解决办法
177
查看次数

C++ 实现中 std::chrono::system_clock 与 std::chrono::steady_clock 的精度?

以下程序:

#include <chrono>
#include <iostream>
#include <vector>

inline uint64_t now() {
    return std::chrono::duration_cast
       <std::chrono::nanoseconds> 
       (std::chrono::system_clock::now()
          .time_since_epoch())
       .count();
}

int main() {
        std::vector<uint64_t> v;
        for (int i = 0; i < 1000; i++)
                v.push_back(now());

        for (int i = 0; i < v.size()-1; i++)
                std::cout << v[i+1] - v[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在以下位置打印大约 250 到 300 范围内的数字:

g++ (Ubuntu 8.2.0-7ubuntu1) 8.2.0
Run Code Online (Sandbox Code Playgroud)

和:

Linux 4.18.0-15-generic #16-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

意味着 std::chrono::system_clock 在该系统上是纳秒精度(很可能是 gettimeofday 对吗?)。我有几个问题:

  1. std::chrono::system_clock这个系统上和之间有什么区别std::chrono::steady_clock?(是的,我知道它们在标准中的指定不同,我正在考虑这个实现。)

  2. 所有 libstdc++ 目标的答案都相同吗? …

c++ c++-chrono c++17

2
推荐指数
1
解决办法
4554
查看次数

获取 conan 包的配方 (conanfile.py)?

对于本地缓存中的某个包 P,如何获取包 P 的配方 (conanfile.py)?

例如,让我们以一个名为的 conan 包为例:

zlib/1.2.11@conan/stable
Run Code Online (Sandbox Code Playgroud)

我可以像这样从 conan-center 将这个包安装到我的本地缓存中:

$ conan install zlib/1.2.11@conan/stable --remote conan-center
Run Code Online (Sandbox Code Playgroud)

如何将这个 zlib 包的配方 (conanfile.py) 解压到当前目录中?

$ mkdir zlib
$ cd zlib
$ conan ??? zlib/1.2.11@conan/stable
         ^.... what goes here?
$ cat conanfile.py
Run Code Online (Sandbox Code Playgroud)

conan

2
推荐指数
1
解决办法
419
查看次数

标签 统计

c++ ×9

c++11 ×3

c++17 ×3

c++-chrono ×2

allocator ×1

c++14 ×1

c++20 ×1

conan ×1

dictionary ×1

vector ×1