草庐IT

non-void

全部标签

c++ - 错误 LNK2019 : unresolved external symbol ___iob_func referenced in function "void __cdecl Padding(int)"

使用FTDIAPI可以在VisualStudio2012下正常编译和链接。但在VS2014下,它给出:ErrorLNK2019:unresolvedexternalsymbol___iob_funcreferencedinfunction"void__cdeclPadding(int)"标准库有变化吗? 最佳答案 是的,标准库已经改变,FTDI似乎并不关心-至少从CDM2.12.18驱动程序版本开始不关心。问题在thisquestion的答案中描述。.ftd2xx.lib中devcon.obj的void__cdeclPadding(

c++ - `static_cast<volatile void>` 对优化器意味着什么?

当人们试图在各种库中执行严格的基准测试时,我有时会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i这里使用volatile来防止优化器注意到被测代码的结果被丢弃,然后丢弃整个计算。当被测代码没有返回值时,说它是voiddo_something(int),然后有时我会看到这样的代码:autostd_start=std::chrono::steady_clock::now();for(inti=0;i(do_something(i+j));autostd_stop=std::chrono::steady_

c++ - 使用 `void` 专门化模板的规则是什么?

这是我刚才在野外写的内容的精简说明。我真的没想到它会起作用,但它确实起作用了。#includetemplateusingFoo=std::array;constintFOO_SIZE=std::tuple_size>::value;我不确定使用void来专门化Foo是否可以编译,但至少在这种情况下可以编译。我不确定这个解决方案是可移植的,或者它是否只是侥幸,因为std::array的实现碰巧与概念兼容空数组,对我来说这听起来像是胡说八道。我什么时候可以,什么时候不能,使用void来特化一个模板? 最佳答案 如果不复制标准的一半(:D

c++ - 为什么 VS 和 gcc 在这里调用不同的转换运算符(const vs non-const)?

这段代码当然很蠢,但我写它只是为了说明问题。在这里:#includeusingnamespacestd;structfoo{inta=42;templateoperatorT*(){cout(&a);}templateoperatorconstT*()const{cout(&a);}templateTget(){coutoperatorT();}};intmain(){foomyFoo;cout()使用VisualStudio2019(ISOC++17,/Ox)编译时的输出是:Tget()operatorconstT*()const42gcc8.3(-std=c++17,-O3)的输出

c++ - "virtual void IBase::Foo"和 "virtual void Foo"之间有什么区别吗?

我使用了VisualAssistXImplementVirtualMethods选项并生成了:classBase:publicIBase{public:Base(void);~Base(void);virtualvoidIBase::Foo();我注意到我可以省略IBase并且程序仍然可以这样编译:virtualvoidFoo();如果这是相同的代码?为什么VisualAssistX插入IBase::?它只是一种提高可读性的“代码风格”吗?谢谢 最佳答案 如果您要从具有冲突虚函数的多个基类派生,这将有助于解决歧义。我怀疑这就是Vis

c++ - STL 容器的范围插入函数在 c++11 下返回 void?

刚刚学习c++,所以我可能没有正确理解这一点,但我只读到范围插入函数返回新标准下的迭代器(C++Primer5thEd,cplusplus.com,cppreference.com,以及各种建议使用它来维护迭代器有效性的答案)。来自cppreference.com:templateiteratorinsert(const_iteratorpos,InputItfirst,InputItlast);但是,我尝试过的每个版本的CygwinGCC和MinGW都使用-std=c++11返回了void。即使查看header,它似乎就是这样写的,而且我无法修改任何内容来修复它。我错过了什么?这是我

c++ - 回调函数 : difference between void(*func)(int) and void(func)(int)

假设我有一个函数:voidfoo(inti){cout我将这个函数传递给:voidfunction1(void(callback)(int),intarg){callback(arg);}voidfunction2(void(*callback)(int),intarg){callback(arg);}这两个函数是一样的吗?两者有什么区别吗? 最佳答案 规则是,在函数的参数列表中,声明为具有函数类型的参数被调整为具有指向函数类型的指针(类似地,可能更广为人知的是,声明为类型为“数组T”调整为“指向T的指针”类型。允许在声明符中使用冗

c++ - decltype(..., void()) 和 void_t 的区别

上次我找到了很多关于SFINAE的答案,这些答案建议使用void_t助手。但我似乎不明白它有什么特别之处:decltype(...,void()).考虑这个例子:templateusingvoid_t=void;templatestructhas_foo:std::false_type{};templatestructhas_foo:std::true_type{};templatestructhas_bar:std::false_type{};templatestructhas_bar>:std::true_type{};classMyClass1{public:intfoo(){r

c++ - 如何使用 void `null` 或 `empty` 类元素扩展 C++ 结构/类

我在学习C++的同时实现了一个国际象棋模块。在我已经(部分)实现的模块中:Board类(网格、棋子、移动方法等)枚举类型Colour(BLACK/WHITE)和Rank(KING,QUEEN,...,PAWN)和Piece结构分组颜色和等级(黑王,...,白兵)。我现在正在决定如何在棋盘(网格)上表示一个正方形的内容。一个正方形必须要么包含一个Piece(BLACKKING),要么什么都不包含。考虑的选项:创建一个包含两个数据成员的structSquare,{booloccupied;Piecepiece;},(可能扩展Piece类)。我的反对意见:解决方案似乎有点太重了,如果广场没有

c++ - 通过 `void *` 和 C++ `extern "C"` 函数调用在 C 中初始化一个 C++ 类

目标是在C中使用OpenCV3。OpenCV有一个CAPI,但很久以前就被弃用了。所以我所做的是C++中的抽象,将所有指向classcv::Something的指针转换为void*,我无法在C中取消引用,但可以传递在执行工作的C++extern"C"函数之间。为了使用这个抽象,我做了一些C函数,它应该从文件中读取图像并将其保存到新文件中:#include"foo.h"#include"libalx/extra/cv.h"intfoo(constchar*restrictsrc,constchar*restrictdest){void*img;intstatus;status=-1;if