草庐IT

c++ - 我可以将 unsigned char* 转换为 unsigned int* 吗?

error:invalidstatic_castfromtype‘unsignedchar*’totype‘uint32_t*{akaunsignedint*}’uint32_t*starti=static_cast(&memory[164]);我分配了一个字符数组,我想将4个字节作为32位int读取,但出现编译器错误。我知道我可以像这样移位:(start[0]它会做同样的事情,但这是很多额外的工作。是否可以通过某种方式将这四个字节转换为int? 最佳答案 static_cast旨在用于“行为良好”的转换,例如double->int

c++ - 为什么我可以用 int > +32767 来操作?

我可以读到int范围(有符号)来自[−32767,+32767]但我可以说,例如inta=70000;intb=71000;intc=a+b;printf("%i",c);return0;输出为141000(正确)。调试器不应该告诉我吗“此操作超出范围”或类似内容?我想这一定是因为我忽略了C编程的基础知识,但我目前正在阅读的所有书籍都没有提到这个“问题”。编辑:2147483647好像是上限,谢谢。如果总和超过该数字,则结果为负,这是预期的,但如果它是减法,例如:2147483649-2147483647=2,结果仍然不错。我的意思是,为什么值2147483649正确地用于该减法目的(

c++ - 我可以在不更改 use_count 的情况下将 shared_ptr<T> & 转换为 shared_ptr<T const> & 吗?

我有一个使用boost::shared_ptr的程序s,特别是依赖于use_count的准确性执行优化。例如,假设一个加法运算有两个参数指针lhs和rhs。假设他们都有类型shared_ptr.当需要执行加法时,我会检查use_count,并且如果我发现其中一个参数的引用计数恰好为1,那么我将重新使用它来就地执行操作。如果两个参数都不能重用,我必须分配一个新的数据缓冲区并执行异地操作。我正在处理庞大的数据结构,因此就地优化非常有用。因此,我永远无法复制shared_ptr没有理由,即每个函数都采用shared_ptrs通过引用或const引用以避免扭曲use_count.我的问题是:我

c++ - 我可以有条件地选择分配给哪个变量吗?

与thisquestion基本相同,但对于C++。最简单的方法是:if(condition){a=f(x);}else{b=f(x);}虽然这满足了我的需求,但一直困扰着我的是我不得不重复输入f(x)两次,更不用说将代码扩展到这么多行而只执行一行。如果我有更多的目标变量可供选择怎么办?switch(conditionvariable){case1:var1=f(x);break;case2:var2=f(x);break;...casey:vary=f(x);break;}这在我看来很不优雅。C++中是否有任何本质上允许我执行以下操作的内容?do-something-that-retu

c++ - 我可以在 C++ 中创建一个匿名的即时类(接口(interface)的实现)吗

在C++中,我可以动态创建接口(interface)的实现吗(理想情况下绑定(bind)局部范围变量。)不确定如何更好地解释它,所以我将写下我希望代码看起来像什么(大致)://Giventhefollowing:classVisitor{virtualvoidvisit(constData&data)=0;}classDataStore{voidvisitData(Visitor&visitor){/**Invokesvisitorwitheachitemofdata.*/}}//Imagineonewouldwritesomethinglike:voidinSomeFunction(

c++ - 我可以用 C++ 扩展 lisp 吗?

我可以从用c或c++编写的库中调用lisp函数吗?我怎样才能扩展口齿不清?当您想进行一些系统调用或类似的事情时,这很有用。 最佳答案 从lisp调用非lisp代码是不常见的,而且很少有必要。CLX(CL的X11客户端实现)不链接到Xlib实现,而是直接“说”X11。在任何系统上,您的CL实现可能已经具有出色的操作系统Hook,因此无需这样做。也就是说,答案取决于lisp实现:在ECL您实际上可以在C下托管一个CL环境,并简单地调用cl_eval()来执行代码。这可以让您用C(或C++)编写您的应用程序(或应用程序宿主)并“调用”li

c++ - 我可以只覆盖继承中的一种方法吗?

我的C++代码如下:#includeusingnamespacestd;classA{public:virtualvoidf(inti){cout在编译期间我得到:g++-std=c++11file.cppfile.cpp:Infunction‘intmain()’:file.cpp:29:9:error:nomatchingfunctionforcallto‘B::f(int,int)’file.cpp:29:9:note:candidateis:file.cpp:20:16:note:virtualvoidB::f(int)file.cpp:20:16:note:candidate

c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?

我可以在另一个线程插入/删除条目时访问(不锁定)std::map条目吗?示例伪C++:typedefstruct{intvalue;intstuff;}some_type_t;std::mapmy_map;//thread1does:my_map.at('a')->value=1;//thread2does:some_type_t*stuff=my_map.at('b');//thread3does:my_map.erase('c');//I'mnotmodifyinganyelementsTisapointertoanpreviouslyallocated"some_type_t"s

c# - 我可以为 Windows Universal App 创建闹钟应用程序吗?

我想创建一个闹钟应用。我找到了在后台操作定时器的方法。但是没有找到控制显示器电源的API(我想在显示器关闭时打开显示器的电源)。Windows10(Windows通用应用程序)没有足够的API来创建该应用程序吗? 最佳答案 Windows-universal-samples最近更新了一些新的RTM示例,包括这个-Notifications.由于Alarm也是一种通知类型,它现在构建在通用Windows平台的新toast通知框架内。从上面的通知链接下载源代码后,使用VisualStudio2015RTM运行它,然后在加载应用程序后,转

c++ - 为什么我可以在 C 中调用函数而不声明它,但不能在 C++ 中调用?

在C++中,在函数声明之前调用它是一个编译器错误。但在C中,它可能会编译。#includeintmain(){foo();//foo()iscalledbeforeitsdeclaration/definition}intfoo(){printf("Hello");return0;}我试过并且知道它是正确的,但我无法理解背后的原因。任何人都可以解释编译过程实际上是如何发生的以及两种语言的不同之处。 最佳答案 事实是代码“编译”为c程序并不意味着你可以做到。编译器应该警告函数foo()的隐式声明。在这种特殊情况下,隐式声明将声明一个相