草庐IT

LOCAL_WHOLE_STATIC_LIBRARIES

全部标签

C++ 局部变量和线程(非 thread_local)

局部数组和线程交互的C++98和C++11内存模型是什么?我不是指的是C++11thread_local关键字,它与全局变量和静态变量有关。相反,我想找出在编译时分配的数组线程的保证行为是什么。我所说的编译时指的是“intarray[100]”,这与使用new[]关键字进行分配不同。我不是指静态变量。例如,假设我有以下结构/类:structxyz{intarray[100];};和以下函数:voidfn(intx){xyzdog;for(inti=0;i从多个线程调用fn()安全吗?看起来C++的内存模型是:所有局部非静态变量和数组都分配在栈上,每个线程都有自己的栈。这是真的吗(即,这

c++ - static 关键字会影响作用域吗?

在C89中,static关键字会影响作用域吗?我的软件负责人告诉我:"Avariablemarkedstaticatthetopofafiledoesn'ttechnicallyhaveglobalscopeanylonger.Staticisascopequalifieraswellasastoragekeyword.Scopeisaconceptthatcoversvisibilityofsymbols,thoughvisibilityisautomaticallycompiledtohavestoragedurationintrinsicallytiedinbyalmostall

c++ - 如果我从不调用这个方法,我可以把 static_assert 放在类方法中吗?

这个版本根本无法编译:structA{voidfoo(){static_assert(0,"Fail");}};这个版本编译没有错误(至少在我的编译器版本中):templatestructB{voidfoo(){static_assert(x,"Fail");}};Bb;只有当我调用b.foo();时,第二个版本才编译失败,所以我想知道如果我从不调用方法,标准是否允许使用第二个版本>富?所有编译器都会以相同的方式运行吗?这不是未定义的行为吗?我想在代码中包含static_assert以在某些模板参数满足某些条件时禁止使用模板类的某些方法。static_assert的用法是否正确?我想在

C++ static const 和初始化(有没有惨败)

我在久违后重返C++,我对众所周知的静态初始化问题的理解有些磕磕绊绊。假设我有一个简单的类Vector2,如下所示(请注意,我知道x和y应该与getter和setter私有(private),为简洁起见,这些只是被省略了):classVector2{public:Vector2(floatx,floaty):x(x),y(y){};floatx,y;}现在,如果我想指定一个静态常量成员来表示x和y设置为1的Vector2,我不确定如何进行——静态常量成员是否会陷入静态初始化问题或让他们const意味着他们还好吗?我正在考虑以下可能性:可能性一://.hclassVector2{publ

c++ - 带有返回 const 引用的隐式转换运算符的类的 static_cast<> 行为

我有以下类(class)(精简后只包含相关部分):#includeclassText{private:std::string_text;public:Text(std::string&&text):_text(std::move(text)){}operatorconststd::string&()const{return_text;}};我的问题是:如果我想获得一个conststd::string&,我可以这样做而不会受到任何惩罚吗:Texttext("fred");auto&s=static_cast(text);或者这会构造一个我最终得到引用的中间std::string吗?这种情

c++ - 解决 "only static const integral data members can be initialized within a class"编译错误

以下创建全局对象会导致编译错误。#include"stdafx.h"#includeusingnamespaceSystem;usingnamespacestd;#pragmahdrstopclassTester;voidinput();classTester{staticintnumber=5;public:Tester(){};~Tester(){};voidsetNumber(intnewNumber){number=newNumber;}intgetNumber(){returnnumber;}}TestertesterObject;voidmain(void){cout>ne

c++ - 在 CMake 中,指定所有可执行文件 target_link_libraries 某些库

在CMake中,有没有办法指定我所有的可执行文件都链接到某个库?基本上我希望我所有的可执行文件都链接到tcmalloc和分析器。简单地指定-ltcmalloc和-lprofiler不是一个好的解决方案,因为我想让CMake以可移植的方式找到库的路径。 最佳答案 您可以使用您自己的函数覆盖内置的add_executable函数,它总是添加所需的链接依赖项:macro(add_executable_name)#invokebuilt-inadd_executable_add_executable(${ARGV})if(TARGET${_

c++ - static_cast 可以将非空指针转换为空指针吗?

我需要为回调函数编写代码(它将在ATL中调用,但这并不重要):HRESULTcallback(void*myObjectVoid){if(myObjectVoid==0){returnE_POINTER;}CMyClass*myObject=static_cast(myObjectVoid);returnmyObject->CallMethod();}这里的void*保证是指向CMyClass的指针,所以static_cast是合法的。我关心的是代码必须尽可能可移植(至少对于较新版本的VisualC++)。所以super偏执狂我也倾向于检查CMyClass*指针-我的意思是如果结果为空

c++ - 类内部和外部的 static 关键字

static关键字一般是跟内部链接有关,但是在类内部使用的static关键字是有外部链接的吧?下面的变量m、n可以在类文件之外访问。classc{inti;intj;staticintm;staticintn;public:voidzap();staticvoidclear();}; 最佳答案 没错。关键字static被严重重载,具有太多不同的含义:在命名空间范围内的变量或函数上,它给出名称内部链接。在类成员上,它使其成为静态成员,这不会影响链接。在函数范围内的变量上,它赋予变量“静态存储持续时间”,而不是“自动”或“动态”存储持续

c++ - 为什么 C++ 标准要求 `Clock::now` 函数为 `static` ?

在C++11中,C++在标准中有一些计时工具。这些设施之一是时钟的标准接口(interface),它基本上允许在调用时钟的now函数时获取时间。到目前为止一切都很好,但我看不出要求now是静态函数的原因。在托管系统上,标准时钟可能可以纯粹通过系统调用或通过读取处理器计数器等来实现。但是,这限制了需要维护某些状态的自定义时钟的实现。使用此接口(interface),要么无法实现某些时钟,要么必须使用全局状态。我遇到的一个问题基本上是将本地时钟与我从NTP服务器获取的时间同步。代码看起来像这样:classsntp_clock{public:sntp_clock():local_time_a