草庐IT

VARIABLE_SIZE_STRUCT

全部标签

c++ - C 与 C++ 中的 struct 和 typedef

我目前正在使用C++IDE来处理需要在C上运行的内容,并希望确保以后不会遇到问题。制作以下结构后:typedefstructtest{inta;intb;};然后我使用创建它的一个实例testmy_test;然后像my_test.a=5等等...这在我的VStudioC++中运行良好。这以后会在gcc上工作吗?我阅读了弹出的相关问题(我发现我也不是第一个提出此类问题的人)但似乎没有人按照我的方式使用。其实typedefstruct{//stuff}test;和我的版本有什么区别? 最佳答案 typedefstructTHIS_IS_

c++ - 将 size() 用于 for 构造中的第二个表达式总是不好的吗?

在下面的示例中,我是否应该期望每次循环时都会调用values.size()?在这种情况下,引入一个临时的vectorSize变量可能是有意义的。或者现代编译器是否应该能够通过识别vector大小不能改变来优化调用。doublesumVector(conststd::vector&values){doublesum=0.0;for(size_tii=0;ii请注意,我不关心是否有更有效的方法来对vector的内容求和,这个问题只是关于在for结构中使用size()。 最佳答案 这是一种明确的方法-size()只被调用一次。for(si

c++ - size_t 参数新运算符

我有一点想不通新运算符重载。假设,我有一个类MyClass但MyClass.hMyClass.cpp和main.cpp文件是这样的;//MyClass.hclassMyClass{public://Somememberfunctionsvoid*operatornew(size_tsize);voidoperatordelete(void*ptr);//...};//MyClass.cppvoid*MyClass::operatornew(size_tsize){returnmalloc(size);}voidMyClass::operatordelete(void*ptr){free

c++ - 后续: What exactly is a variable in C++14/C++17?

如标题所示,thisquestionhasbeenaskedbefore.但是,答案与C++03/0x(11)有关。C++11(N3337)关于变量是这样说的:[basic]/6:Avariableisintroducedbythedeclarationofareferenceotherthananon-staticdatamemberorofanobject.Thevariable’snamedenotesthereferenceorobject.这可能意味着变量本质上是命名对象/引用。然而,在C++14/C++17,最后一句改为Thevariable’sname,ifany,den

c++ - "friend struct A;"和 "friend A;"语法有什么区别?

做和做有什么区别:structA;structB{friendstructA;};和structA;structB{friendA;};第二部分省略struct是什么意思? 最佳答案 不同的是,如果你写friendA;,A必须是一个已知的类型名,也就是说它必须在之前声明。如果你写friendstructA;,这本身就是A的声明,所以不需要事先声明:structB{friendstructA;};//OK虽然有一些微妙之处。例如,friendclass/structA在类B的最内层封闭命名空间中声明类A(感谢CaptainObvlio

c++ - C++的STL priority_queue with struct

我们如何将STLpriority_queue用于结构?任何插入和弹出的插图,其中结构具有多种数据类型?说:structthing{inta;charb;}glass[10];.现在如何使用“inta”将此结构放入priority_queue进行排序? 最佳答案 这里是对youroriginalquestion,whichyoudeleted的略微修改的答案没有明显的原因。原始文件包含足够的信息供您弄清楚这一点,但这里是这样的:提供一个使用int进行比较的小于比较。您需要做的就是提供一个仿函数来实现与严格弱排序的小于比较,或者为您的类

c++ - std::string 实现是否符合 's.c_str() + s.size()' 不一定与 '&s[s.size()]' 相同?

§21.4.5[string.access]const_referenceoperator[](size_typepos)const;referenceoperator[](size_typepos);Returns:*(begin()+pos)ifpos.Otherwise,returnsareferencetoanobjectoftypecharTwithvaluecharT(),wheremodifyingtheobjectleadstoundefinedbehavior.至少对我来说,第二部分意味着这个“charT类型的对象”可能位于存储在std::string中的序列之外。目

c++ - 捕获最后一个 WM_SIZE

当我调整窗口大小时,我想告诉程序的另一部分我的窗口已更改大小。我在MSDN上阅读那:WMSIZE消息WMSIZE消息在窗口大小更改后发送到窗口。但是,即使在拖动时我也会收到WM_SIZE。我注意到在调整窗口大小时还会发送一条WM_SIZING消息。目前我看不出WM_SIZE和WM_SIZING之间的区别。有什么方法可以捕获最后一个WM_SIZE消息,而不是用调整大小消息“垃圾邮件”我的程序? 最佳答案 当您开始拖动窗口时,系统会进入模式移动/调整大小循环;在拖动操作完成之前,它不会返回到您自己的消息循环。您仍然得到WM_SIZE,因

c++ - C++中size_t的性能

我翻译了代码here如下所示转换为C++#includeusingnamespacestd;intt=20;boolis_evenly_divisible(constinta,constintb){for(inti=2;i在MacOSX10.8.4上的编译器g++4.8.1上使用-O3标志,我得到时间0.568s用户时间。现在,如果我将函数is_evenly_divisible中第1行的计数器i更改为size_t,时间会突然跳到1.588s。即使我将所有变量都更改为size_t,这种情况仍然存在,时间增加到1.646s这是怎么回事?size_t不应该提高性能而不是降低性能,因为它是比i

C++ size_t 或 ptrdiff_t

如果您有以下代码,其中p是一个指针:p=p+strlen(p)+size_t(1);由于strlen()和size_t都是size_t,我应该将代码转换为ptrdiff_t吗?p=p+(ptrdiff_t)(strlen(p)+size_t(1));如果是,为什么?谢谢,格雷格 最佳答案 std::ptrdiff_t已签署。std::size_t未签名。如果p可能有负长度,则将strlen(p)转换为ptrdiff_t是有意义的,这是不可能的。但是,如果p足够大(例如,在大多数32位平台上大于2,147,483,647字节),则该转