草庐IT

c++ - 为什么Visual C++在C中而不是从C++中警告从const void **到void *的隐式强制转换?

概要当C程序试图将指向const数据的指针(如constvoid**或constchar**)转换为void*时,MicrosoftVisualStudio中的C/C++编译器会给出警告C4090(即使这种类型实际上并非指向const的指针)。更奇怪的是,同一个编译器静默地接受作为C++编译的相同代码。这种不一致的原因是什么?为什么VisualStudio(与其他编译器不同)在将指向const的指针隐式转换为void*时存在问题?细节我有一个C程序,其中将通过变量参数列表传递的C字符串读入数组(通过调用va_arg的循环)。由于C字符串的类型为constchar*,因此跟踪它们的数组的

c++ - 使用 `std::function<void(...)>` 调用非 void 函数

不久前我使用std::function就像这样:std::functionfunc=[](inti)->int{returni;};基本上,我这样做是因为我想在std::function中存储不同的函数对象,但我不想限制这些函数的返回类型。由于这似乎有效,我就同意了。但我不相信它可以安全使用,我也找不到任何关于它的文档。有谁知道这种用法是否合法?或者更一般地说,可以安全地分配给std::function的对象的规则是什么?编辑为了澄清,我关心的问题是lambda函数返回一个int,而func声明为返回类型void。我不确定这是否可以,尤其是在调用func()之后。

c++ - 使用 `std::function<void(...)>` 调用非 void 函数

不久前我使用std::function就像这样:std::functionfunc=[](inti)->int{returni;};基本上,我这样做是因为我想在std::function中存储不同的函数对象,但我不想限制这些函数的返回类型。由于这似乎有效,我就同意了。但我不相信它可以安全使用,我也找不到任何关于它的文档。有谁知道这种用法是否合法?或者更一般地说,可以安全地分配给std::function的对象的规则是什么?编辑为了澄清,我关心的问题是lambda函数返回一个int,而func声明为返回类型void。我不确定这是否可以,尤其是在调用func()之后。

C++。错误 : void is not a pointer-to-object type

我有一个C++程序:structarguments{inta,b,c;arguments():a(3),b(6),c(9){}};classtest_class{public:void*member_func(void*args){argumentsvars=(arguments*)(*args);//error:voidisnota//pointer-to-objecttypestd::cout编译时会报错:error:‘void*’isnotapointer-to-objecttype有人可以解释我做错了什么来产生这个错误吗? 最佳答案

C++。错误 : void is not a pointer-to-object type

我有一个C++程序:structarguments{inta,b,c;arguments():a(3),b(6),c(9){}};classtest_class{public:void*member_func(void*args){argumentsvars=(arguments*)(*args);//error:voidisnota//pointer-to-objecttypestd::cout编译时会报错:error:‘void*’isnotapointer-to-objecttype有人可以解释我做错了什么来产生这个错误吗? 最佳答案

c# - “C++ void Pointer”和 “C# var”之间的区别

在学习C#时,我想到了这个问题。void和var有什么区别?这是我要分享的两个示例:void*voidInt=(void*)7;void*voidChar=(void*)'F';void*voidCharArray=(void*)"AbcString";这是var的示例:varvarInt=7;varvarChar='F';varvarCharArray="AbcString";void是匿名数据类型吗?如果是,那么主要是什么var和void之间的区别?有人可以帮我解决这种情况吗? 最佳答案 这里的其他答案还不错,但我认为它们并不清

c# - “C++ void Pointer”和 “C# var”之间的区别

在学习C#时,我想到了这个问题。void和var有什么区别?这是我要分享的两个示例:void*voidInt=(void*)7;void*voidChar=(void*)'F';void*voidCharArray=(void*)"AbcString";这是var的示例:varvarInt=7;varvarChar='F';varvarCharArray="AbcString";void是匿名数据类型吗?如果是,那么主要是什么var和void之间的区别?有人可以帮我解决这种情况吗? 最佳答案 这里的其他答案还不错,但我认为它们并不清

c++ - 为什么 back_insert_iterator/front_insert_iterator/insert_iterator 的 value_type/difference_type/pointer/reference 都是 void?

在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数templateTOutputIterSplitSpace(std::istream&IS,TOutputIterresult){TElemelem;while(IS>>elem){*result=elem;++result;}returnresult;}我认为这很尴尬,因为我必须在调用时明确给出TElem的类型。例如,我必须写:std::vectorv;SplitSpace(std::cin,back_inserter(v));//IwanttoittobeSplitSpace(std::cin,back_inse

c++ - 为什么 back_insert_iterator/front_insert_iterator/insert_iterator 的 value_type/difference_type/pointer/reference 都是 void?

在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数templateTOutputIterSplitSpace(std::istream&IS,TOutputIterresult){TElemelem;while(IS>>elem){*result=elem;++result;}returnresult;}我认为这很尴尬,因为我必须在调用时明确给出TElem的类型。例如,我必须写:std::vectorv;SplitSpace(std::cin,back_inserter(v));//IwanttoittobeSplitSpace(std::cin,back_inse

c++ - "break when an exception is void"是什么意思?

过去我发现VisualC++2010的自动中断异常功能非常有用,今天我查看了此对话框中的选项,发现其中一种异常类型是“void”。这是什么意思?如果我选择这个,我会在代码中抛出的任何异常上中断吗?如果不是,什么样的throw语句会触发这种类型的断点?我想一个更一般的后续问题是我在哪里可以找到有关此对话框及其所有选项的文档? 最佳答案 关于它是如何工作的(正如MSalters所提到的),这只是不正确的命名。其实应该命名为void*,当然。但为什么它对int*、constchar*等有效(实际上是任何指针类型,包括指向用户定义类型的指针