草庐IT

合法性

全部标签

c++ - 在 C++ 函数调用中使用自增运算符是否合法?

thisquestion中发生了一些争论。关于以下代码是否合法的C++:std::list::iteratori=items.begin();while(i!=items.end()){boolisActive=(*i)->update();if(!isActive){items.erase(i++);//***Isthisundefinedbehavior?***}else{other_code_involving(*i);++i;}}这里的问题是erase()将使有问题的迭代器无效。如果在评估i++之前发生这种情况,那么像这样递增i在技术上是未定义的行为,即使它看起来可以与特定的编

java - 为什么 "short thirty = 3 * 10"是合法分配?

如果short在算术运算中自动提升为int,那么为什么是:shortthirty=10*3;对short变量thirty的合法赋值?反过来,这个:shortten=10;shortthree=3;shortthirty=ten*three;//DOESNOTCOMPILEASEXPECTED还有这个:intten=10;intthree=3;shortthirty=ten*three;//DOESNOTCOMPILEASEXPECTED无法编译,因为如果未按预期进行强制转换,则不允许将int值分配给short。数字文字有什么特别之处吗? 最佳答案

java - 为什么 "short thirty = 3 * 10"是合法分配?

如果short在算术运算中自动提升为int,那么为什么是:shortthirty=10*3;对short变量thirty的合法赋值?反过来,这个:shortten=10;shortthree=3;shortthirty=ten*three;//DOESNOTCOMPILEASEXPECTED还有这个:intten=10;intthree=3;shortthirty=ten*three;//DOESNOTCOMPILEASEXPECTED无法编译,因为如果未按预期进行强制转换,则不允许将int值分配给short。数字文字有什么特别之处吗? 最佳答案

c++ - void* 有合法用途吗?

在C++中是否可以合法使用void*?或者这是因为C有它而引入的?简单回顾一下我的想法:输入:如果我们想允许多种输入类型,我们可以重载函数和方法,或者我们可以定义一个通用的基类或模板(感谢您在答案中提到这一点)。在这两种情况下,代码都更具描述性且不易出错(前提是基类以合理的方式实现)。输出:我想不出任何我宁愿接收void*的情况,而不是从已知基类派生的东西。只是为了明确我的意思:我不是专门询问void*是否有用例,而是是否有void*的用例code>是最好的或唯一可用的选择。下面几个人已经完美回答了。 最佳答案 void*作为::o

c++ - void* 有合法用途吗?

在C++中是否可以合法使用void*?或者这是因为C有它而引入的?简单回顾一下我的想法:输入:如果我们想允许多种输入类型,我们可以重载函数和方法,或者我们可以定义一个通用的基类或模板(感谢您在答案中提到这一点)。在这两种情况下,代码都更具描述性且不易出错(前提是基类以合理的方式实现)。输出:我想不出任何我宁愿接收void*的情况,而不是从已知基类派生的东西。只是为了明确我的意思:我不是专门询问void*是否有用例,而是是否有void*的用例code>是最好的或唯一可用的选择。下面几个人已经完美回答了。 最佳答案 void*作为::o

c++ - void *a = &a 如何合法?

考虑以下C++代码:void*a=&a;为什么编译器不提示使用未声明的标识符?另外,编译器认为变量a是什么?它是指向void对象的指针还是指向void*指针的指针? 最佳答案 C++中变量声明的范围可能非常令人惊讶:void*a=&a;^~~~~~~~~~~~~~~~~adeclaredas`void*`fromhereon因此,&a是void**但由于任何指针类型都可以隐式转换为void*... 关于c++-void*a=&a如何合法?,我们在StackOverflow上找到一个类似的

c++ - void *a = &a 如何合法?

考虑以下C++代码:void*a=&a;为什么编译器不提示使用未声明的标识符?另外,编译器认为变量a是什么?它是指向void对象的指针还是指向void*指针的指针? 最佳答案 C++中变量声明的范围可能非常令人惊讶:void*a=&a;^~~~~~~~~~~~~~~~~adeclaredas`void*`fromhereon因此,&a是void**但由于任何指针类型都可以隐式转换为void*... 关于c++-void*a=&a如何合法?,我们在StackOverflow上找到一个类似的

c++ - 为什么 shared_ptr<void> 合法,而 unique_ptr<void> 格式不正确?

这个问题确实符合标题:我很想知道造成这种差异的技术原因是什么,以及基本原理?std::shared_ptrsharedToVoid;//legal;std::unique_ptruniqueToVoid;//ill-formed; 最佳答案 这是因为std::shared_ptr实现了类型删除,而std::unique_ptr没有。由于std::shared_ptr实现了类型删除,它还支持另一个有趣的属性,即。它确实不需要删除器的类型作为模板类型参数到类模板。看看他们的声明:template>classunique_ptr;其中有D

c++ - 为什么 shared_ptr<void> 合法,而 unique_ptr<void> 格式不正确?

这个问题确实符合标题:我很想知道造成这种差异的技术原因是什么,以及基本原理?std::shared_ptrsharedToVoid;//legal;std::unique_ptruniqueToVoid;//ill-formed; 最佳答案 这是因为std::shared_ptr实现了类型删除,而std::unique_ptr没有。由于std::shared_ptr实现了类型删除,它还支持另一个有趣的属性,即。它确实不需要删除器的类型作为模板类型参数到类模板。看看他们的声明:template>classunique_ptr;其中有D

javascript - JavaScript 的 "with"语句有合法用途吗?

AlanStorm'scomments回应我关于withstatement的回答让我思考。我很少找到使用这种特定语言功能的理由,也从未考虑过它会如何造成麻烦。现在,我很好奇如何有效地使用with,同时避免它的陷阱。您在哪里发现with语句有用? 最佳答案 今天突然想到另一个用途,于是我兴奋地搜索了网络,发现现有的提及它:DefiningVariablesinsideBlockScope.背景尽管JavaScript表面上与C和C++相似,但它并不将变量范围限定在定义它们的block中:varname="Joe";if(true){v