以下代码来自cppreference.comstd::lexicographical_compare上的实现示例:
template<class InputIt1, class InputIt2>
bool lexicographical_compare(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2)
{
for ( ; (first1 != last1) && (first2 != last2); ++first1, (void) ++first2 ) {
if (*first1 < *first2) return true;
if (*first2 < *first1) return false;
}
return (first1 == last1) && (first2 != last2);
}
Run Code Online (Sandbox Code Playgroud)
为什么(void)循环中有一个,没有把它放在那里会有什么后果?
这可能是一个非常愚蠢的问题,但我有以下编码行将RAW图像转换为BitmapImages:
public async void CreateImageThumbnails(string imagePath, int imgId)
{
await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
Run Code Online (Sandbox Code Playgroud)
它调用这种方法 CreateThumbnail()
public static BitmapImage CreateThumbnail(string imagePath)
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
{
bitmap.BeginInit();
bitmap.DecodePixelWidth = 283;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
bitmap.Freeze();
GC.WaitForPendingFinalizers();
GC.Collect();
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
当使用async Void而不是async Task在我的CreateImageThumbnails方法中时,我的应用程序处理图像(其中29个)比快11秒async Task.为什么会这样?
内存使用更加使用void,但操作完成多快.我对线程知之甚少,这就是我提出这个问题的原因.有人可以解释为什么会这样吗?
我还做了一些关于什么时候和什么时候不使用的研究 …
你如何简洁地测试一个 void 异步函数是否用 jest 成功执行?我正在使用打字稿。
// foo.ts
export class Foo {
public async bar(): Promise<void> {
await someAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
如何测试new Foo().bar()不抛出错误?
关于在方法签名中返回布尔值以指示成功操作而不是声明void,是否有任何硬性规则和快速规则?我发现,对于我的调用方法中的更关键操作,我想知道操作是否已完成,因此我可以记录任何问题.这是布尔的"不恰当"使用吗?
void f()意味着f什么都不返回.如果void什么都不返回,那我们为什么要使用呢?主要目的是void什么?
所以我知道这Void用于表示函数不接受或返回值.在Swift中,Void实际上是空元组的类型别名().
有趣的是(在Beta 6中),您甚至可以声明类型的变量Void:
var x: Void
println(x)
x = test()
func test() {}
Run Code Online (Sandbox Code Playgroud)
这些陈述都是合法的.该println()打印"()".
到目前为止,我无法弄清楚这可以用于什么.为什么你需要一个不能保存任何值的变量?有没有人知道这方面的实际用途,还是这只是Swift的一个怪癖?
该程序在C++中编译和运行,但不是Java和C#等多种语言.
#include <iostream>
using namespace std;
void foo2() {
cout << "foo 2.\n";
}
void foo() {
return foo2();
}
int main() {
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Java中,这给出了编译器错误,如'Void方法无法返回值'.但由于被调用的方法本身就是一个void,因此它不返回值.我知道为了便于阅读,可能会禁止这样的结构.还有其他异议吗?
编辑:为了将来的参考,我在这里发现了一些类似的问题return-void-type-in-c-and-c 我个人认为这个问题还没有回答.回复'因为它在规范中这样说,继续'不会削减它,因为有人必须首先编写规范.也许我应该问'允许返回像C++这样的void类型有什么优缺点'?
据我所知,我不能声明一个右值引用void.
例如,以下代码格式错误:
void f(void &&v) { }
Run Code Online (Sandbox Code Playgroud)
从[20.2.6/1](函数模板declval)我们得到一个声明declval:
template <class T>
add_rvalue_reference_t<T>
declval() noexcept;
Run Code Online (Sandbox Code Playgroud)
因此,declval<void>(让我说)会导致中void &&,我猜这是病态的,以及前面的示例所示.
无论如何,以下最小的工作示例编译:
#include<utility>
int main() {
decltype(std::declval<void>())* ptr = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
请注意,以下情况也是如此:
static_assert(std::is_same<decltype(std::declval<void>()), void>::value, "!");
Run Code Online (Sandbox Code Playgroud)
我void&&原以为它会如前所述(或者更好,我期待它无法编译).
实际上,它恰好是任何其他非引用类型的右值引用.
举个例子:
static_assert(std::is_same<decltype(std::declval<int>()), int&&>::value, "!");
Run Code Online (Sandbox Code Playgroud)
是否declval<void>有效表达?上面的代码是否合法?
为什么行为void不同于任何其他类型?(如果代码是合法的,那么它就不会起作用,否则可能是一个答案).
如果它是合法的,标准允许哪些?我找不到案子了.
当然,标准说:
declval的模板参数T可以是不完整类型.
无论如何,这里它会导致一个不可接受的类型(void&&),并且它会绕着它丢弃右值引用.