草庐IT

static-initializer

全部标签

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ - 为什么大括号中的标量不被解释为 initializer_list

考虑以下代码片段:#include#includestructC{C(std::initializer_list){std::cout,std::initializer_list){std::coutLive演示。为什么c2变量的大括号中的标量值不被解释为单独的std::initializer_list? 最佳答案 首先,非常重要的一点:您有两种不同类型的构造函数。特别是第一个,C(std::initializer_list),称为初始化器列表构造函数。第二个只是一个普通的用户定义的构造函数。[dcl.init.list]/p2Ac

c++ - 错误 C2440 : 'initializing' : cannot convert from 'initializer-list'

#includeusingnamespacestd;structTDate{intday,month,year;voidReadfromkb(){cout>day>>month>>year;}voidprint(){cout为什么我收到错误1​​errorC2440:'initializing':cannotconvertfrom'initializer-list'to'TDate'and2IntelliSense:toomanyinitializervalues。当我删除boolvalid和intID时,程序可以运行。为什么会这样? 最佳答案

c++ - 关于多线程环境下static const变量的使用

我正在尝试了解潜在的场景以及它是否可能成为问题。所以我有一个当前线程安全的静态函数。函数是这样的:staticthread_safe_func(){...process}现在在此函数中,我添加以下内容:staticthread_safe_func(){staticconstClass::NonThreadSafeClassName()*array[16]={Class::NonThreadSafeClassName(),Class::NonThreadSafeClassName(),Class::NonThreadSafeClassName(),Class::NonThreadSafe

c++ - 错误 : invalid use of member in static member function

我有两个类,这是其中一个的标题:#ifndefWRAPPER_HPP#defineWRAPPER_HPP#includeusingnamespacestd;classWrapper{private://SDL_Surface*screen;public:staticSDL_Surface*screen;staticvoidset_screen(SDL_Surface*_screen);staticvoidset_pixel(intx,inty,Uint8color);staticvoidclear_screen(intr,intg,intb);staticSDL_Surface*loa

c++ - 从括号内的 initializer_list 构造时调用了错误的重载

我一直认为当我使用初始化列表C++语法时:something({...});编译器总是很清楚我想调用采用std::initializer_list的重载,但对于MSVC2015似乎不太清楚。我测试了这个简单的代码:#include#includenamespacetesting{templatestructTest{Test(){printf("Test::Test()\n");}explicitTest(size_tcount){printf("Test::Test(int)\n");}Test(std::initializer_listinit){printf("Test::Tes

c++ - 如果函数被称为 constexpr,则有条件地 static_assert

我知道有人提议使用constexpr()运算符,但这还没有在gcc/clang中实现。我也知道有一个使用机器代码编辑等技巧的实现:http://saadahmad.ca/detecting-evaluation-context-inside-constexpr-functions/我想知道是否有一个有点受限的解决方案:structF{constexprF(intv){ifconstexpr(constexpr()){static_assert(v>0);}else{assert(v>0);}}};//...constexprFf{0};//shouldtriggeracompile-t

c++ - 在 VS2008 和 GCC 中编译 static const int = X 的最佳代码

我在编写需要在VisualStudio2008和GCC4.6中编译(并且还需要编译回GCC3.4)的C++代码时遇到了一个问题:staticconstint类成员。Otherquestionshavecoveredstaticconstint类成员所需的规则。特别是,标准和GCC要求变量在一个且仅一个目标文件中有定义。但是,VisualStudio在编译包含.cpp文件中的定义的代码(在Debug模式下)时会产生LNK2005错误。我试图在其中做出决定的一些方法是:使用.cpp文件中的值而不是header对其进行初始化。使用预处理器删除MSVC的定义。将其替换为枚举。用宏替换它。最后两

c++ - 铿锵错误 : ambiguous conversion for static_cast

我有以下代码:typedefintAliasB;typedefunsignedshortAliasA;classAlias{public:explicitAlias(intsomeInt){}};//(*)!!belowbreakstheconversionpathviaAliasA!!//typedefAliasAliasA;classC{public:C(){}};classB{public:B(){}B(constAliasB&value){}operatorAliasB()const{return-1000;}Ccombine(constB&someB){returnC();}

c++ - C++ 对 static const 整数类型应用了哪些特殊规则?

我的印象是C++将相同的特殊规则应用于staticconst整型regardless是否声明于命名空间范围或在类/结构/union内声明。现在我在想我被不合规的编译器教坏了。staticconstintA=1;structs{staticconstintA=1;};除了范围上的明显差异,A和s::A有何不同?...它们的用法何时会被替换为字面值?...我什么时候可以拿到它的地址?...什么时候需要单独定义它们?我对C++03特别感兴趣。 最佳答案 static关键字在类作用域中的含义不同并在命名空间范围内。事实上,它在命名空间范围内