草庐IT

c++ - 如何可靠地获取 C 风格数组的大小?

如何可靠地获取C风格数组的大小?经常推荐的方法貌似是使用sizeof,但是在foo函数中不起作用,其中传入了x:#includevoidfoo(intx[]){std::cerrthisquestion的答案推荐sizeof但他们并没有说如果你传递数组它(显然?)不起作用。那么,我必须改用哨兵吗?(我不认为我的foo函数的用户总是可以信任在末尾放置一个哨兵。当然,我可以使用std::vector,但是那么我就没有得到很好的速记语法{1,2,3,4,5}。) 最佳答案 在C中,C中的数组参数实际上只是指针,因此sizeof()将不起作

c++ - 如何将 char 数组转换为 wchar_t 数组?

charcmd[40];driver=FuncGetDrive(driver);sprintf_s(cmd,"%c:\\test.exe",driver);我不能在中使用cmdsei.lpFile=cmad;所以,如何将char数组转换为wchar_t数组? 最佳答案 只需使用这个:staticwchar_t*charToWChar(constchar*text){constsize_tsize=strlen(text)+1;wchar_t*wText=newwchar_t[size];mbstowcs(wText,text,siz

c++ - 数组的大小 C++

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Sizeofarraypassedasparameter我想知道为什么以下代码的输出是1和9。这是因为函数大小中未声明的数组吗?如何将“数组大小”与函数分开?#include"stdafx.h"#includeusingnamespacestd;intsize(inta[]){returnsizeofa/sizeofa[0];}intmain(){inta[]={5,2,4,7,1,8,9,10,6};cout

header 中的c++数组声明

我想知道是否可以声明一个数组(此时大小未知)作为类的私有(private)成员,然后在类的构造函数中设置大小。例如:classTest{inta[];public:Test(intsize);};Test::Test(intsize){a[size];//thisiswrong,butwhatcanidohere?}这是可能的还是我应该使用动态数组?谢谢! 最佳答案 简短回答:否(数组的大小仅在编译时定义)长答案:您可以使用vector来获得相同的结果:classTest{std::vectora;public:Test(std::

c++ - 为什么 clang 无法使用默认的 integer_sequence 实例化嵌套的可变参数模板?

考虑一个例子:#includetemplatestructpack{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structipack;templatestructipack,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structvpack;templatestructvpack>,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts

c++ - 固定大小字符串类的最佳实践

我想要一个固定大小的字符串类。理想情况下,该接口(interface)将与std::string之一相匹配,唯一的区别是新类从不分配新内存。对于应避免分配新内存的应用程序,它应该是一个方便的类。大小可以是静态的(在编译时已知)。我认为有两种方式。第一种是围绕char数组实现一个类,然后或多或少地实现std::string具有的所有功能。我还必须实现一些运算符来创建具有给定固定大小字符串等的std::string第二种方法,我什至不确定是否可行,是从std::string继承并覆盖所有可能改变字符串大小的函数。我查看了VisualStudio中的basic_stringheader,它似

c++ - -1u 是有效的 C++ 吗?

例如size_tx=-1u;if(x==-1u)...有效吗?如果这是有效的,它将阻止警告。当然在32位系统上x应该是0xffffffff而在64位系统上系统应该是0xffffffffffffffff。-乔臣 最佳答案 1u类型为unsignedint.然后使用一元-取反运算符(operator)。行为如下:Thenegativeofanunsignedquantityiscomputedbysubtractingitsvaluefrom2n,wherenisthenumberofbitsinthepromotedoperand(C

c++ - 根据模板启用类的成员

我已经知道您可以使用std::enable_if启用(或不启用)类的方法例如:templateclassField{...size_toffset(conststd::array&p)const{...}templatetypenamestd::enable_if::typeoffset(conststd::array&p)const{returnoffset(_projection(p));}...};这有助于在特定情况下无法调用无效的函数以及消除重载错误......这对我来说非常好!我想更进一步,让我类的一些成员只在需要时出现。这样,如果我尝试使用一个本来不会被启动的对象,我会得到

c++ - C/C++ 获取结构大小

今天,我惊喜地发现Whenthesizeofoperatorisappliedtoaclass,struct,oruniontype,theresultisthenumberofbytesinanobjectofthattype,plusanypaddingaddedtoalignmembersonwordboundaries.Theresultdoesnotnecessarilycorrespondtothesizecalculatedbyaddingthestoragerequirementsoftheindividualmembers.我不知道,而且我很确定这件事破坏了我的一些旧

c++ - 调用非成员而不是成员函数

我有一个非常简单的问题:某处有一个函数intsize(constC&c)至少可以通过依赖于参数的名称查找找到它。现在的问题:structB{intsize(){/*...*/}voiddoSomething(constC&c){intx=size(c);//这不起作用,因为名称查找在找到成员函数后停止。我必须在指示的行中写什么,以便不尝试调用成员函数,但是编译器会做如果成员函数没有调用它会做的任何事情存在吗?请注意,解决方案是不编写::size,因为这样会阻止argument-dependentnamelookup并且仅当我知道在哪里声明size时才有效。进一步复杂化:我知道对于我使用