在阅读boost :: test的文档时,我遇到了"自由函数"这个术语.我理解的是,自由函数是任何不返回任何函数的函数(它的返回类型为void).但在进一步阅读后,似乎自由函数也没有任何论据.但我不确定.这些都是我的假设.任何人都可以定义自由功能吗?
同一函数的两个版本如何不同,它们的不同之处仅在于一个版本是内联的而另一个版本不是内联的?这是我今天编写的一些代码,我不确定它如何工作。
#include <cmath>
#include <iostream>
bool is_cube(double r)
{
return floor(cbrt(r)) == cbrt(r);
}
bool inline is_cube_inline(double r)
{
return floor(cbrt(r)) == cbrt(r);
}
int main()
{
std::cout << (floor(cbrt(27.0)) == cbrt(27.0)) << std::endl;
std::cout << (is_cube(27.0)) << std::endl;
std::cout << (is_cube_inline(27.0)) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我希望所有输出都等于1
,但是实际上它输出的是(g ++ 8.3.1,没有标志):
1
0
1
Run Code Online (Sandbox Code Playgroud)
代替
1
1
1
Run Code Online (Sandbox Code Playgroud)
编辑:clang ++ 7.0.0输出此:
0
0
0
Run Code Online (Sandbox Code Playgroud)
和g ++ -Ofast this:
1
1
1
Run Code Online (Sandbox Code Playgroud) 我正在从关于常量的cplusplus.com 教程中学习 C++ 中的原始字符串。根据该站点上的定义,原始字符串应R"sequence(
以)sequence
where开始和结束,wheresequence
可以是任何字符序列。
该网站的示例之一如下:
R"&%$(string with \backslash)&%$"
但是,当我尝试编译包含上述原始字符串的代码时,出现编译错误。
test.cpp:5:28: error: invalid character '$' in raw string delimiter
5 | std::string str = R"&%$(string with \backslash)&%$";
| ^
test.cpp:5:23: error: stray 'R' in program
Run Code Online (Sandbox Code Playgroud)
我在 Windows 和 Linux 上使用 g++ 和 clang++ 进行了尝试。他们都没有工作。
C ++ 20引入std::common_reference
。目的是什么?有人可以举一个使用它的例子吗?
我有一个从外部应用程序返回的人员列表,我在我的本地应用程序中创建了一个排除列表,让我可以选择从列表中手动删除人员.
我有一个我创建的复合键,这两个键都很常见,我希望找到一种有效的方法,可以使用我的列表从列表中删除人员
例如
class Person
{
prop string compositeKey { get; set; }
}
class Exclusions
{
prop string compositeKey { get; set; }
}
List<Person> people = GetFromDB;
List<Exclusions> exclusions = GetFromOtherDB;
List<Person> filteredResults = People - exclustions using the composite key as a comparer
Run Code Online (Sandbox Code Playgroud)
我认为LINQ是这样做的理想方式,但是在尝试连接,扩展方法,使用产量等之后我还是遇到了麻烦.
如果这是SQL我会使用not in (?,?,?)
查询.
我有一个代码生成器,可以在 Rust 中生成长表达式,但编译器似乎不能很好地处理这个问题。在这些示例中,为了简单起见,我使用常量/加法,但实际上我希望支持涉及变量和其他编程结构的更复杂的表达式。
fn main() {
let _x = 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
// ...
// 500 identical lines
// ...
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时它崩溃了Segmentation fault (core dumped)
。(它的中间行数较少,所以我认为这只是表达式长度引起的崩溃。)
我尝试过在不同的地方放入括号。在每行的开头和结尾添加括号可以阻止崩溃,但需要一小时来编译(并且由于操作顺序不同,还会更改语义):
fn main() {
let _x = 1+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)
+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)
+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)
// ...
// 8000 identical lines
// ...
+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)
+(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)
;
}
Run Code Online (Sandbox Code Playgroud)
fasteval看起来处理表达式的速度要快得多,但只能处理基本的变量操作和函数调用,因此不会处理表达式和更复杂的 Rust 代码的混合。
将每个表达式分解为许多生成的变量(每个二元运算符一个)也可以阻止崩溃,但变量数量的编译时间仍然是二次方(例如,添加 8000 个数字需要 9 秒,添加 16000 个数字需要 37 秒)。
这感觉应该可行,但代码生成方面需要做很多工作。
查看 Rust 编译器源代码,看起来速度缓慢可能是由于在进行树操作时对抽象语法节点进行了大量克隆。感觉很多时候底层数据是不可变的,因此可以重用对现有不可变数据的引用,而不是复制所有树。然而,这感觉可能需要相当多的努力才能开始工作。
有没有其他方法可以避免 Rust …
bool MemoryStream.TryGetBuffer(out ArraySegment<byte> buffer)
是.NET 4.6中的一个新API,可用于访问存储在MemoryStream中的有效字节,而无需复制它们.这非常令人兴奋!它返回一个bool,如果转换成功则为"true;否则为false"并填充out参数.
什么时候返回true,表示out ArraySegment<byte> buffer
现在包含有效信息?今天没有记录.
我知道如果它返回false,我可以.ToArray()
用来获取字节的副本.并且,我们已经拥有.GetBuffer()
,但有时MemoryStreams是在缓冲区中创建的,并且这些信息很难(好吧,等等)以后再使用,更不用说try ... catch
稳健性所需了.
在make_shared的boost文档中,它说:
除了方便和风格之外,这样的函数也是异常安全且相当快的,因为它可以对对象及其相应的控制块使用单个分配,从而消除了shared_ptr的构造开销的很大一部分.
我不明白"单一分配"的含义,这是什么意思?
例如,我有一个 Kubernetes 作业,它的并行度设置为 4。创建此作业时,我可能希望将其扩展到 8。但似乎edit
ing 作业并将并行度设置为 8 并没有实际上在 Job 中创建更多的 pod。
我错过了什么吗?或者有没有办法扩展工作?
作为我们应用程序的一部分,我们正在构建与 Azure DevOps 的 REST API 集成的功能。我们感兴趣的一个关键组件是能够看到特定提交的实际差异,以便我们可以查看和分析行内容。我们已经为 GitHub、GitLab 和 Bitbucket 创建了这种集成,每次都很简单:每个都有一个相当简单的差异端点,它接受特定的提交 ID 并对其进行比较(有时与特定的父提交)。
然而,我在 Azure DevOps 中没有找到相同的功能:diffs 端点有一些与此相关的数据,但它实际上只是对哪些文件已更改以及这些更改的高级性质的概述,以及代表每个状态(之前和之后)的文件的特定 blob 的 ID。
理论上可以使用这些 blob 来手动构建我想要的内容,实际上我已经能够查询之前和之后的 blob 以获取每个文件的差异。但这是每个文件两个单独的端点查询——进行 20 个文件提交,突然间我们需要 40 个 API 调用才能构建合理的差异。不幸的是,这并不真正符合我们的性能需求。
是否有单独的 API 端点或技术可以让我们获取原始差异?它不需要是直接的原始 diff ,只要能让我们通过最少的 API 调用(最好只有一个)来查看每一行git diff
(而不是每个文件)的前后状态即可。我在 StackOverflow 上的文档和此处进行了大量搜索,但没有找到任何可以实现此目的的内容。
c++ ×5
.net ×1
azure-devops ×1
boost ×1
c# ×1
c++20 ×1
kubernetes ×1
linq ×1
list ×1
make-shared ×1
memorystream ×1
rust ×1
shared-ptr ×1
string ×1
type-traits ×1