请考虑以下 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) 我放弃了尝试将2d数组传递给函数,其中维度在编译时是未知的.经过一些研究,似乎二维矢量可能是一个很好的替代品.我只是想确认这是声明一个维度totalRows X totalColumns的二维向量的正确方法,初始化每个单元格以包含空格字符:
vector<vector<char> > world(totalRows, vector<char>(totalColumns, ' '));
Run Code Online (Sandbox Code Playgroud) 考虑以下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++ 11 2.5预处理令牌[lex.pptoken]:
如条款16所述,在翻译阶段4期间的某些情况下,空白空间(或其不存在)不仅仅用于预处理标记分离.
这指的是哪种情况?
在C++ 11 5.1主表达式中,它指出:
[id-expression]的类型是标识符的类型.结果是由标识符表示的实体.如果实体是函数,变量或数据成员,则结果是左值,否则为prvalue.
什么是作为prvalue的id表达式的示例?
(也就是说,id-expression的一个例子是什么,它引用的是一个不是函数的实体,而不是一个变量,而不是一个数据成员?)
在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)
通过互斥,我们的意思是对于任何两个不同的整数i和j(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)
实现这个的最简单方法是什么?
当a std::map将Allocator作为构造函数中的参数时,它通过引用获取其类模板参数中的类型:
explicit map(const Allocator& alloc);
Run Code Online (Sandbox Code Playgroud)
它是将此引用存储在对象中,还是采用副本(按值存储),还是不执行任何操作,仅将模板参数用作类型?你是怎么决定的?
我显然太愚蠢了,不能使用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)
有任何想法吗?
以下程序:
#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 对吗?)。我有几个问题:
std::chrono::system_clock这个系统上和之间有什么区别std::chrono::steady_clock?(是的,我知道它们在标准中的指定不同,我正在考虑这个实现。)
所有 libstdc++ 目标的答案都相同吗? …
对于本地缓存中的某个包 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) 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