首页 > TAG信息列表 > language-lawyer
python-布尔值的存储空间中存储的值是多少?
我对内存空间分配不了解很多.对于每个变量,都会分配一个内存空间,因此对于Python中的布尔变量,将在该变量的内存空间中存储什么值?解决方法:注意:以下描述适用于Python的CPython参考解释器.实施细节将在其他解释器中有所不同,例如PyPy,Jython,IronPython等 Python的布尔对象是单例.因javascript-for…in-进入循环之前,是否对对象进行了一次迭代评估?
当我使用for … in循环时: for(var i in object) {} 我想知道所讨论的对象是一次还是每次循环都进行求值. 我在浏览器(也在节点中)进行了快速测试,例如: for(var i in (console.log('INIT'), [1, 2, 3, 4])) { console.log('KEY', i); } 我得到: INIT KEY 0 KEY 1 KEY 2 KEY 3是否可以为未分配的局部变量保证CS0165 C#编译器错误?
在这样的代码中: int val; if (something()) val = 10; val++; // Error CS0165 Use of unassigned local variable 当使用局部变量时,如果没有确定地初始化它,我会收到CS0165错误消息. 在C语言世界中,这种情况是未定义的行为类情况,这意味着任何情况都是允许的.因此,也许有c-正式保证读取的内容在其他线程中不会看到写入(带有竞争条件)的方式是什么?
这是关于C标准的形式保证的问题. 当潜在存在竞争条件时,可以保证对共享变量(普通,非原子)的读取看不到写入,从而使两次读取看到两个“后续”(按照程序顺序和条件)写入并导致每次读取导致一次写入,并引起数据竞争: // Global state int x = 0, y = 0; // Thread 1: r1 = x; if (r1c-非连续对象的数组
#include <iostream> #include <cstring> // This struct is not guaranteed to occupy contiguous storage // in the sense of the C++ Object model (§1.8.5): struct separated { int i; separated(int a, int b){i=a; i2=b;} ~separated(){i=i2=-1c-lang跳过初始化列表构造的处理
如果您看下面的代码,我认为main()中的两行都应为InitSomething调用initializer_list构造函数. gcc按照我的预期输出22,但是clang仅输出一个2.clang是否错误? 我正在使用-std = c 14. #include <iostream> struct InitSomething { explicit InitSomething(int) { std::cout <<c-“从主模板的参数推导出专业化的模板参数”是什么意思?
N4567 14.5.5.1 [temp.class.spec.match]p4 In a type name that refers to a class template specialization, (e.g., A) the argument list shall match the template parameter list of the primary template. The template arguments of a specialization are deducedc-标准引用:对“ vector :: operator []”的超出范围调用是否会调用未定义行为?
考虑: #include <vector> int main() { std::vector <int> v; v.reserve (100); v[1] = 42; } 我知道上面的代码调用了Undefined Behavior,因为在v [1]的调用位置,根据v.size()的向量大小为<. 1.(为零.) 但是,我花了最后一个小时左右的时间浏览C标准,以直接或间接地澄清这c-glvalue整数常数表达式是常数表达式吗?
N4527 5.20 [expr.const] p3 An integral constant expression is an expression of integral or unscoped enumeration type, implicitly converted to a prvalue, where the converted expression is a core constant expression. 5.20 [expr.const] p5 A constant exp为什么C不允许将函数参数用作默认值?
这是this question的后续工作.在我看来,OP问题中的代码相当合理且明确.为什么C不允许使用前一个参数来定义后一个参数的默认值,如下所示: int foo( int a, int b = a ); 另外,至少在C 11中,可以使用声明的参数类型来确定返回类型,因此以类似的方式使用函数参数并不是闻所未闻的: ac-检查的防护参数包是否导致程序格式错误?
我不止一次(甚至在SO上)看到了这样的代码: template<typename U, typename... G, typename T = Traits<U>> struct { static_assert(sizeof...(G) == 0, "!"); // ... }; 或这个: template<typename T, typename... G, typename = std::enable_if_t<conditc-部分专注于错误类型的非类型模板参数
考虑以下: template <unsigned > struct uint_ { }; template <class > struct X { static constexpr bool value = false; }; template <int I> // NB: int, not unsigned struct X<uint_<I>> { static constexpr bool value = true; }如何根据c标准访问对象表示?
如何访问object representation?为了回答这个问题,我将其分为两个问题: 1.如何获取对象表示的指针? 根据标准,我看不到任何获取对象表示形式的指针的方法.通常建议以这种方式获取它: some_type obj{}; const char * rep = reinterpret_cast<const unsigned char*>(&obj); 然而,在标准java – 流中的收集器中的比较器导致类型推断的问题?
我有以下简化的示例,它将一个字符串列表分类为类别,以树形图的形式从整数到列表 public static void main(String[] args) { List<String> list = Arrays.asList("A", "B", "C", "D", "E"); TreeMap<Integer, List<String>> res =c – 通用lambda及其作为常量表达式的参数
以下代码被GCC 7.2和clang 5.0.0接受,但被Microsoft VS 2017 15.5.0 Preview 5和Intel C编译器19拒绝: struct S { }; constexpr int f(S) { return 0; } int main() { auto lambda = [](auto x) { constexpr int e = f(x); }; lambda(S{}); } 微c – 性能差异:std :: accumulate vs std :: inner_product vs Loop
今天,当我尝试实现这个简单的操作时,我想分享一些让我头脑发热的东西: 我发现了执行相同操作的不同方法: >使用std :: inner_product. >实现谓词并使用std :: accumulate函数.>使用C风格的循环. 我想通过使用Quick Bench并启用所有优化来执行一些基准测试. 首先,我将两个C替代品与浮c – 使用std :: launder从指向非活动对象的指针获取指向活动对象成员的指针?
这个问题跟随这个one 我们来考虑这个示例代码: struct sso { union{ struct { char* ptr; char size_r[8]; } large_str; char short_str[16]; }; bool is_short_str() const{ return *std::launder(short_str+15)=='\0'; //UB? }c – 为什么trailing-return-type不是类的完整类上下文?
请注意,[class.mem]p6中未提及尾随返回类型 A complete-class context of a class is a (6.1) function body, (6.2) default argument, (6.3) noexcept-specifier ([except.spec]), (6.4) contract condition, or (6.5) default member initializer within the mec – static_cast’d指针值
在当前的标准草案(和C 17)中,this是关于static_casting a void *的: A prvalue of type “pointer to cv1 void” can be converted to a prvalue of type “pointer to cv2 T”, where T is an object type and cv2 is the same cv-qualification as, or greater cv-qualificatioc – 我们有无法在未评估的上下文中命名非静态成员函数的原因吗?
阅读[expr.prim.id]时,人们会看到 An id-expression that denotes a non-static data member or non-static member function of a class can only be used: if that id-expression denotes a non-static data member and it appears in an unevaluated operand. 上面的子= Python运算符在语法上是正确的
我不小心写道: total_acc =+ accuracy 代替: total_acc += accuracy 我在网上搜索,找不到anything.那么发生了什么,为什么Python认为我的意思是我在打字? 计算机太信任我们了.c – `std :: array`默认是可构造的,其中`T`不是默认构造的吗?
请考虑以下代码: #include <array> struct T { T() = delete; }; int main() { std::array<T, 0> a; a.size(); } 我们默认初始化一个0大小的数组.由于没有元素,因此不应该调用T的构造函数. 但是,Clang仍然要求T是默认构造,而GCC接受上面的代码. 请注意,如果我们将c – 由lambda捕获的std :: cout的本地引用,而不需要它
我迷失了吗?这总是允许的吗? #include <iostream> int main() { auto& os = std::cout; auto write = []() { os << "what\n"; }; write(); } 我正在使用: Apple LLVM version 10.0.0 (clang-1000.10.44.4) Target: x86_64-c – 可以使用自动占位符来推断非类型模板参数中的函数结果吗?
考虑简单的例子: template <auto(*X)()> struct Foo { decltype(X()) x; }; int bar(); int main() { static_cast<void>(Foo<bar>{}); } [gcc]和[clang]似乎都接受了代码.代码真的符合c 17吗?如果是这样,还有其他一些规则会导致以下代码生成错误吗? template <class T,c – 优化存储/构建易失性堆栈变量是否合法?
我注意到clang和gcc在某些情况下优化了堆栈上声明的volatile结构的构造或赋值.例如,以下代码: struct nonvol2 { uint32_t a, b; }; void volatile_struct2() { volatile nonvol2 temp = {1, 2}; } Compiles on clang to: volatile_struct2(): # @volatile_struct2() r