草庐IT

c++ - decltype 和隐藏外部名称的类成员名称之间的交互

这段代码intclash;structFoo{decltype(clash)clash;};在clang上静默编译,但在gcc上编译失败并给出错误error:declarationof'intFoo::clash'[-fpermissive]error:changesmeaningof'clash'from'intclash'[-fpermissive]错误的产生似乎需要2个成分:阴影必须由类成员完成(如果它是函数的局部作用域则没问题)。decltype([shadowedname])必须在声明[shadowingname]之前的阴影范围内使用。我的问题有两个:gcc拒绝此代码是否合理

c++ - 在同一语句中返回传入的临时值并从中读取是否安全?

我只是写了这篇文章,没有想太多。它似乎工作正常,但我不确定它是否绝对安全。classFoo{structBuffer{chardata[sizeof("outputwilllooklikethisXXXXYYYYZZZZ")];};constchar*print(constchar*format=DEFUALT_FORMAT,Buffer&&buf=Buffer()){sort_of_sprintf_thing(format,buf.data,sizeof(buf.data),...);returnbuf.data;}};std::cout所以我认为语义是临时Buffer将一直存在,直

c++ - 条件中声明的变量范围

一些重构导致了一段代码,使我得到了这个最小的测试用例:intmain(){if(inti=1){/*IF-BLOCK*/}else{throwi;}}这编译得很好。但是,我一直认为i只对IF-BLOCK可见,但似乎不是。这是编译器错误吗?另外,为什么下面的方法有效?intmain(){if(inti=1){}elseif(inti=2){}else{throwi;}}注意第二个if“重新声明”i。另一个编译器错误? 最佳答案 不,这实际上是正确的行为。6.4Selectionstatements[stmt.select]Anamei

c++ - -O1/2/3 与 -std=c++1y/11/98 - 如果包含 <cmath> 我收到错误 : '_hypot' was not declared in this scope

我刚刚使用mingw-get-setup更新了MinGW而且我无法构建包含的任何内容header如果我使用大于-O0的东西与-std=c++1y.(我也试过c++11和c++98)我收到这样的错误:g++.exe-pedantic-errors-pedantic-Wextra-Wall-std=c++1y-O3-cZ:\Projects\C++\L6\src\events.cpp-oobj\src\events.oInfileincludedfromz:\lander\mingw\lib\gcc\mingw32\4.8.1\include\c++\cmath:44:0,fromZ:\P

c++ - 返回填充有局部变量的 vector 安全吗?

返回已填充局部变量的vector是否安全?例如,如果我有...#includestructTarget{public:intVar1;//...snip...intVar20;};classTest{public:std::vector*Run(void){std::vector*targets=newstd::vector;for(inti=0;ipush_back(t);}returntargets;}};intmain(){Testt=Test();std::vector*container=t.Run();//Dostuffwith`container`}在此示例中,我在for

c++ - 为什么在函数体内定义的内置类型的未初始化对象具有未定义的值?

问题:为什么在函数体内定义的内置类型的未初始化对象有未定义的值,而定义的内置类型的对象外部都被初始化为0或''?举个例子:#includeusingstd::cout;usingstd::endl;intia[10];/*iahasglobalscope*/intmain(){intia2[10];/*ia2hasblockscope*/for(constauto&i:ia)cout 最佳答案 因为C++的一般规则之一是您不必为不使用的东西付费。初始化全局对象相对便宜,因为它只在程序启动时发生一次。初始化局部变量会增加每个函数调用的

c++ - 成员函数作用域变量

考虑以下代码:#includestructX{intfoo(){//CanIgetthistobeaninstance-specificstaticvariable,please?staticinti=0;returni++;}};intmain(){Xa,b;std::cout是否可以为X的每个实例获取此静态变量i的拷贝,而无需将声明和初始化移动到一些很远很远的header和构造函数?我想要这个的原因是因为这个变量的值只在这个特定的函数内相关(但也特定于它所在的成员函数的实例),例如,上次调用参数,上次调用时间等。这个想法背后的类已经有点大了,并且在一个函数中使用的如此小的变量的声明

c++ - C++ 中的变量作用域

如果我有以下代码:for(intmyvar=0;myvar然后,之后我写了以下内容:myvar=0;var2=0;这合法吗?我的VC++6编译正确,但我认为这应该是非法的。(它在我的其他编译器之一中给出了编译器错误。) 最佳答案 不,不会(§3.3.2本地范围):Anamedeclaredinablock(6.3)islocaltothatblock.Itspotentialscopebeginsatitspointofdeclaration(3.3.1)andendsattheendofitsdeclarativeregion.我

c++ - 从另一个文件访问 C++ 中的外部变量

我在其中一个cpp文件中有一个全局变量,我在其中为其赋值。现在为了能够在另一个cpp文件中使用它,我将它声明为extern并且这个文件有多个使用它的函数,所以我在全局范围内这样做。现在可以在其中一个函数中访问此变量的值,而不能在另一个函数中访问。除了在头文件中使用它之外,任何建议都会很好,因为我浪费了4天的时间。 最佳答案 抱歉,我忽略了除了使用头文件之外的任何建议的答案请求。这就是header的用途,当您正确使用它们时......请仔细阅读:global.h#ifndefMY_GLOBALS_H#defineMY_GLOBALS_

CSS @scope 如何取代 BEM

前端工程师最常见且最具挑战性的问题之一是CSS命名约定。随着 BlockElementModifier(BEM)方法的流行,许多人习惯于按照一种可维护的模式组织他们的样式。即将在Chrome浏览器中实施的 @scope 允许在样式表中对样式进行块级作用域划分,从而进一步提高了BEM的性能。这将使样式表更易于维护,同时对CSS级联进行更严格的控制。在这篇文章中,我们将展示如何在Chrome中使用 @scope 特性,以及如何使用它来替换前端项目中的BEM。我们通过几个例子进行讲解,你可以在GitHub上的示例项目中查看并跟随操作。CSS@scope是什么?在即将发布的Chrome118版本中,@