草庐IT

合法性

全部标签

c++ - 将 float* 转换为 std::complex<float>* 是否合法

N379726.4[complex.numbers]说这是关于类型转换std::complex*至T*4Moreover,ifaisanexpressionoftypecvstd::complex*andtheexpressiona[i]iswell-definedforanintegerexpressioni,then:-reinterpret_cast(a)[2*i]shalldesignatetherealpartofa[i],and-reinterpret_cast(a)[2*i+1]shalldesignatetheimaginarypartofa[i].这(或标准的其他措辞

c++ - 通过重新使用的非 `const` 名称修改动态分配的 -`const` 对象是否合法?

考虑以下程序:#includeintmain(){intx=0;constint*px=new(&x)constint(0);x=1;std::cout它compilesunderGCC4.8(并产生“预期的”输出),但我怀疑它完全是UB,因为动态对象的类型为constint(whichremainspartofthetype)。但是,如果是的话,为什么编译器不阻止我违反const-correctness? 最佳答案 tl;dr:是的,这是未定义的行为。不,编译器不会对其进行诊断。一般来说,编译器不会(有时不能)诊断UB。const

c++ - 需要引用标准关于 main 函数作为模板函数的合法性

一时兴起,我尝试使用clang2.9将main函数定义为模板函数:templateintmain(intargc,char**argv){}并收到以下错误。error:'main'cannotbeatemplateintmain(intargc,char**argv)^有谁知道标准的哪一部分禁止这样做,相关文本是什么? 最佳答案 那么,这个(3.6.1)怎么样:Aprogramshallcontainaglobalfunctioncalledmain,whichisthedesignatedstartoftheprogram.[..

c++ - 定义嵌套模板的合法语法是什么?

我有以下嵌套模板classA{templateclassB{templatevoidfoo(Uarg);};};我正在尝试像这样定义嵌套模板:templatevoidA::B::foo(Uarg){...}但是我收到declarationisincompatiblewithfunctiontemplate错误。这样做的合法语法是什么? 最佳答案 您需要分隔模板声明:templatetemplatevoidA::B::foo(Uarg){…} 关于c++-定义嵌套模板的合法语法是什么?,我

c++ - 标准算法比较器接受不同类型的对象是否合法?

AnanswerrecentlypostedonStackOverflow展示了为标准算法提供采用不同类型操作数的比较器的代码:2.Useacomparatorwithtemplatedoperator().Insteadofusingalambda,defineafunctorwithatemplatedoperator().structcomparator{templatebooloperator()(Tconst&lhs,Uconst&rhs)const{returnlhs.mCommonFieldThen,it'saseasyas:std::sort(aStructs.begi

c++ - 无法合法转换为 'this' 指针

请看一下这段代码并运行它:我遇到了非常奇怪的错误:错误1​​errorC2663:'Allocator::allocate_help':2overloadshavenolegalconversionfor'this'pointertemplateclassAllocator{private:templatevoidallocate_help(constArgument&arg,Int2Type){}templatestd::nullptr_tallocate_help(constArgument&arg,Int2Type){returnnullptr;}public:templatev

c++ - 程序是否不使用无法绑定(bind)到引用参数的默认参数,是否合法?

考虑以下几点:#includetemplatestructFoo{Foo(Tv={}):var(v){}Tvar;};intmain(){//Foof;//cannotcompileintx=42;Foof(x);std::cout它在GCC4.8中构建并成功运行,但它严格合法吗?Tv={}对T=int&无效,但未使用此默认参数。我能在标准中找到的唯一相关语言似乎没有明确解释这个程序是否有效;尽管以各种方式触及该主题,但以下内容似乎都不完全相关:[C++11:8.3.6/1]:Ifaninitializer-clauseisspecifiedinaparameter-declarati

c++ - 是 unsigned char ('0' ) 合法的 C++

以下代码在VisualStudio中编译但在g++下编译失败。intmain(){inta=unsignedchar('0');return0;}unsignedchar()是一种有效的C++转换方式吗? 最佳答案 不,这是不合法的。函数式显式类型转换需要一个简单类型说明符,后跟一个带括号的表达式列表。(§5.2.3)unsignedchar不是简单类型说明符;这与James提出的问题有关.显然,如果unsignedchar是一个简单类型说明符,它将是合法的。解决方法是使用std::identity:templatestructid

c++ - 调用不通过空指针访问成员的非静态方法是否合法/定义明确的 C++?

我最近遇到了以下代码:classFoo{public:voidbar();//..otherstuff};voidFoo::bar(){if(!this){//..dosomestuffwithoutaccessinganydatamembersreturn;}//..donormalactionsusingdatamembers}代码可以编译,因为在C++中,方法只是隐式传递一个指向“this”的指针的函数,并且可以像任何其他指针一样检查“this”是否为NULL。很明显,这段代码很困惑,而且是不好的做法,即使它不会崩溃;在调试器中单步执行代码会非常困惑,看到一个NULL指针即将调用

c++ - 如何检测鼠标点击是合法的还是自动的?

如何知道鼠标点击是否是模拟的?当鼠标点击通过程序或真正的鼠标设备发送时...我正在为游戏编写系统检测程序,以避免仅接受合法鼠标点击的机器人、自动点击等 最佳答案 这在一定程度上取决于您正在编写的应用程序类型,但如果可以的话,我会观察光标移动,而不是点击。人类鼠标移动具有不均匀的速度、react时间、不精确性(点击按钮的不同坐标等...)。此外,您可以通过随机要求难以编写脚本的交互来保护图形用户界面免受机器人攻击。例如:如果脚本依赖于始终位于相同位置的按钮,我会确保在尝试保持直观的同时,对话框每次都应在略有不同的位置弹出。否则:无法检