草庐IT

non-struct

全部标签

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++ : convert date/time string to tm struct

将此视为对thisquestion的跟进.从本质上讲,C++日期/时间格式化工具似乎无可救药地被破坏了——以至于为了做一些像将日期/时间字符串转换为对象这样简单的事情,你真的不得不求助于Boost.Datetime或旧的Cstrftime/strptime工具。问题是这些解决方案都不能直接与特定iostream对象上的C++区域设置一起工作。C工具使用全局C/POSIX语言环境设置,而Boost.Datetime中的I/O工具似乎完全绕过iostream语言环境设置,允许用户直接设置月份、工作日等的名称,而不管语言环境如何。因此,我想要一些能够尊重注入(inject)特定I/O流的语言

c++ - gcc std::regex 与 -fpack-struct 段错误

考虑以下简单的C++程序#include#includeintmain(intargc,char*argv[]){std::regexfoobar("[A]+");return0;}当使用-fpack-struct=1编译时出现段错误g++-5-std=gnu++14./fpack_regex.cpp-fpack-struct=1-oa.out&&a.outSegmentationfault(coredumped)同时g++-5-std=gnu++14./fpack_regex.cpp-oa.out&&a.out工作得很好。关于为什么pack-struct=1选项可能导致此失败的任何线

c++ - 错误 C2011 : 'MSXML2::IXMLDOMImplementation' : 'struct' type redefinition

我正在更改我的C++项目,该项目之前在VC6中,现在正在迁移到VS2008,以使用MSXML6而不是早期的MSXML3。当代码在VC6中时,我们通过导入它来使用MSXML3#import"msxml3.dll"这被替换为#import"msxml6.dll"在此之后,当我编译项目时,我得到了这个和其他几个类似的错误错误C2011:“MSXML2::IXMLDOMImplementation”:“结构”类型重新定义以上错误在msxml3.tlh文件中。1)为什么仍然使用msxml3?2)我将问题缩小到MSXML.h,它以某种方式自动包含在我的项目中。为什么是这样?3)MSXML.h中引用

c++ - 使用 constexpr 或 struct 进行元编程

我们刚刚开始学习C++11中的模板元编程。作为练习,我们编写了一个输出int值的二进制表示的程序。我们提出了两种可能的实现方式。第一种使用带有枚举值的递归,而第二种方法使用constexpr函数。我们的期望是这两种实现都会产生相同大小的可执行文件。然而,第一个实现导致9064字节,而第二个实现有9096字节。我们不介意字节的微小差异,但不了解导致差异的原因。我们在没有优化标志的情况下使用GCC4.8.2编译了程序,但是,在-O2标志下发现了相同的结果。#includeusingnamespacestd;templatestructBin{enum{value=10*Bin>1)>::v

C++ 缓存友好方式访问 `vector <struct_type>` 的所有元素的所有成员

我有兴趣针对多线程计算优化我的代码。在缓存、流水线或内存访问的任何其他方面,以下比较如何节省这些资源:案例一structsomething{floata;floatb;intc;boold;};vectorvec(n,something());for(intq=0;q案例二structsomething{floata;floatb;intc;boold;};vectorvec(n,something());for(intq=0;q案例三vectora(n);vectorb(n);vectorc(n);vectord(n);for(intq=0;q此外,是否有更好的方法来解决上述问题?

c++ - 函数参数中的struct关键字,有什么区别?

我想知道,有什么区别:structNode{intdata;Node*next;};和structNode{intdata;structNode*next;};为什么我们在第二个例子中需要struct关键字?另外,有什么区别voidFoo(Node*head){Node*cur=head;//....}和voidFoo(structNode*head){structNode*cur=head;//....} 最佳答案 只有包含struct的声明在C中有效。在C++中没有区别。但是,您可以typedefC中的struct,这样就不必每

c++ - 添加 Boost 使调试构建依赖于 "non-D"MSVC 运行时 DLL

我有一个烦人的问题,我可能能够以某种方式规避它,但另一方面,我更愿意了解它并了解到底发生了什么,因为看起来这些东西真的会留下来。故事是这样的:我有一个简单的OpenGL应用程序,它运行良好:在编译、链接或运行它时从来都不是主要问题。现在我决定尝试将一些更密集的计算移到工作线程中,以便可能使GUI响应更快——当然是使用Boost.Thread。简而言之,如果我在.cpp文件的开头添加以下片段:#includevoiddummyThreadFun(){while(1);}boost::threadp(dummyThreadFun);,然后我在尝试启动调试版本时开始收到“此应用程序无法启动,

C++, Linux : error: conversion from ‘boost::unique_future<void>’ to non-scalar type ‘boost::shared_future<void>’ requested. 如何绕过它?

我尝试使用boostthreadfutures.所以如图here我们可以得到sharedfuture来自packagedtask.所以我在linux上尝试这样的功能:templatevoidpool_item(boost::shared_ptr>pt){boost::shared_futurefi=pt->get_future();//error//...但调用它时出错:../../src/cf-util/thread_pool.h:Inmemberfunction‘voidthread_pool::pool_item(boost::shared_ptr>)[withtask_retu

c++ - `struct ap_conf_vector_t` 的定义在哪里?

Apache源代码中structap_conf_vector_t的定义在哪里?是在什么地方生成的? 最佳答案 ap_conf_vector_t似乎是一种不透明的数据类型。这通常在过去用于定义稳定api,以后可以在不更改api的情况下更改实现。ap_conf_vector_t仅用作api函数的参数,例如:ap_get_module_configap_parse_htaccess您不应该直接操作此结构的成员。一种OO编程,您只能使用提供的函数。 关于c++-`structap_conf_ve