草庐IT

WPRINTF_SIZEOF

全部标签

c++ - 无论是否初始化,使用 sizeof(p[0]) 真的无害吗?

我和我的一个friend争论,如果我们已经定义了一个数组/指针:sometype*p;如果我们想知道类型的大小,他说应该使用:sizeof(sometype)我说过也可以使用:sizeof(p[0]),应该是一样的。他不同意,他的观点是如果p没有初始化,那么p[0]的这种用法可能会导致问题。但据我所知,只有当我们改变或依赖于p[0]的值时,这才会有害。由于我们既不更改p[0]也不使用p[0]的值,因此这是完全明智的。既然不能互相说服,谁能把这个概念讲清楚。我知道这个问题没有用,几乎所有开发人员都会使用sizeof(sometype),包括我:)。但这个问题很有趣,我真的很想知道size

c++ - inline static auto 的 Initializer "sizeof(T)"...是否需要实例化?

如果表达式的类型不相关,但我们用它来初始化静态自动变量,会发生什么?GCC和Clang的行为不同templatestructA{staticinlineautox=sizeof(T{}.f);};Aa;GCC不会引发错误。但是Clang认为这是无效的,因为它实例化了“sizeof”的操作数。GCC似乎跳过了该步骤,因为sizeof(T{}.f)始终具有类型size_t(不依赖于类型),因此它已经知道x没有实例化。如果我们引用x,例如(void)a.x;,两个编译器都会拒绝该程序。它甚至必须解析x的类型吗?如果我没记错的话,C++14以上的语言允许使用“占位符类型”保留事物(如函数)并进

c++ - placement new 基于模板 sizeof()

这在C++11中合法吗?使用最新的英特尔编译器编译并且似乎可以工作,但我只是觉得它是侥幸。classcbase{virtualvoidcall();};templateclassfunctor:publiccbase{public:functor(T*obj,void(T::*pfunc)()):_obj(obj),_pfunc(pfunc){}virtualvoidcall(){(_obj)(*_pfunc)();}private:T&_obj;void(T::*_pfunc)();//edited:thisisnogood://conststaticintsize=sizeof(_

c++ - 查找 sizeof char 数组 C++

我试图在另一个初始化它的函数中获取sizeofchar数组变量,但是无法获取正确的sizeof。请看下面的代码intfoo(uint8*buffer){cout输出是:sizeof:4sizeofafterfoo():13期望的输出是:sizeof:13sizeofafterfoo():13 最佳答案 单靠指针是做不到的。指针不包含有关数组大小的信息——它们只是一个内存地址。因为数组在传递给函数时会衰减为指针,所以您会损失数组的大小。然而,一种方法是使用模板:templatesize_tfoo(constT(&buffer)[N])

c++ - sizeof 运算符为 C 和 C++ 返回不同的值?

一个字符数组是全局定义的,一个同名的结构是在一个函数中定义的。为什么sizeof运算符对c和c++返回不同的值?charS[13];voidfun(){structS{intv;};intv1=sizeof(S);}//在C++中返回4,在C中返回13 最佳答案 因为在C++中,你定义的struct被命名为S,而在C中,它被命名为structS(这就是为什么你经常请参阅C代码中使用的typedefstruct)。如果您将代码更改为以下内容,您将获得预期的结果:charS[13];voidfun(){typedefstructtagS

c++ - sizeof 可变参数模板(所有元素的 sizeof 之和)

考虑以下功能:templateinlineunsignedintmyFunction(constList&...list){return/*SOMETHING*/;}除了/*SOMETHING*/之外,为了返回所有参数的sizeof的总和,最简单的是什么?例如myFunction(int,char,double)=4+1+8=13 最佳答案 在C++17中,使用折叠表达式:templateinlineconstexprunsignedintmyFunction(constList&...list){return(0+...+size

c++ - 为什么 sizeof(int) 与 sizeof(int*) 不同?

我想知道为什么在下面的程序中sizeof(int)返回的值与sizeof(int*)不同。这是小程序:intmain(){std::cout这是输出:48直到现在我还记得整数指针的大小是4byte(gcc编译器)。如何检查指针的正确大小?是否依赖于计算机?我正在运行ubuntu12.04#lsb_release-aDistributorID:UbuntuDescription:Ubuntu12.04LTSRelease:12.04Codename:precise指针的大小不是常量(标准大小)8字节。 最佳答案 int和int*的大小

c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?

这个问题在这里已经有了答案:boost::threaddatastructuresizesontheridiculousside?(4个答案)关闭9年前。而不是sizeof(std::atomic)==1?可以通过简单的std::atomic实现互斥锁。,所以我认为互斥锁的大小可以这么小,或者可能是4(32位)。

c++ - 两种模板类型的 sizeof,当两者都派生自一个基类时

示例代码#includestructbase{};templatestructleft:base{Typevalue;};templatestructright:base{Typevalue;};intmain(){std::cout=")>=">)>>>>=">>>>)输出GCC4.6是sizeofleft=2sizeofleft>=3sizeofleft>>>>=6使用clang3.1sizeofleft=2sizeofleft>=3sizeofleft>>>>=6使用MSVC2012sizeofleft=1sizeofleft>=1sizeofleft>>>>=1所以,问题是,它

c++ - sizeof(T) 值的标准类型特征

C++11标准指定了一个类型特征std::alignment_of它只返回alignof(T)的值.sizeof是否有类似的特征?运算符(operator)?我只是遗漏了它,还是只是在标准中遗漏了它,或者是否有一些模糊的技术原因未指定它?显然创建这样一个特征是微不足道的,但我无法想象在引入std::alignment_of时不会考虑它.对于上下文,我有一个自定义类型特征,当应用于类型列表时,我用它来获取单个特征的最大值。templateclassTrait,typenameF,typename...T>structtrait_max:std::integral_constant::va