language-lawyer

    1热度

    1回答

    以下代码与Clang(3.9.1测试)和GCC(6.3测试)一起编译,如此链接所示:https://godbolt.org/g/kO1nBa。但是,MSVC(19.00.24215.1测试)未能编译: struct ValueWitnessTable { int size; }; struct ExtraInhabitantsValueWitnessTable : ValueWit

    33热度

    3回答

    这个问题之前被问过,但我仍然困惑。 我知道 unsigned int a = -1; 将UINT_MAX。但这不是因为所有的位都被设置了。 C11表示 如果新类型是无符号的,所述值是通过反复增加或 减去一个小于能够在该新型 来表示直到该值是在新的范围中的最大值更转换键入 因此,可以说UINT_MAX是100(我知道这应该是大于2^16-1但让我们忽略这个现在) unsigned int a =

    1热度

    1回答

    我们都听到了 - “尝试一个干净的构建,看看它是否有效”。奇怪的运行时错误通常会在重建后消失。这让我想 - 正确跟踪依赖关系是构建系统的工作。 这样的运行时错误的定义构建系统中的错误 - 无论是make,msbuild还是其中的一个。换句话说,如果一个干净的构建和一个普通的构建会产生不同的结果,那么按照定义,这个构建系统中的一个错误是? 编辑:我假设the build environment is

    56热度

    3回答

    在Java中没有任何警告,这是不可能的创建泛型类型直接的数组: Test<String>[] t1 = new Test<String>[10]; // Compile-time error 然而,我们可以做到这一点使用原始类型: Test<String>[] t2 = new Test[10]; // Compile warning "unchecked" 在Java 8,它也可以使用一

    5热度

    1回答

    除了std::is_trivial和std::is_trivially_copyable,C++ 11提供了许多类型性状检查类型是否具有无关紧要的构造函数,析构函数和复制/移动赋值运算符,即琐碎: std::is_trivially_constructible std::is_trivially_default_constructible std::is_trivially_copy_constr

    6热度

    1回答

    在C++中,特别是在C++ 14 n4296中,有两个章节讨论枚举类型,这似乎与我相矛盾。见7.2/5(其是10.2/5在n4659): 每个枚举定义了类型,它是从所有其他类型不同。每个枚举也有一个基础类型。基础类型可以使用enum-base明确指定。对于范围枚举类型,如果未明确指定,则基础类型为int。在这两种情况下,底层类型都被认为是固定的。在enum-specifier的大括号之后,每个枚举

    7热度

    2回答

    [basic.link]/6(我emphasiss): 块范围声明的函数的名称和块范围extern声明声明的变量名具有联动。 ... static void f(); static int i = 0; void g() { extern void f(); // internal linkage int i; // #2 i has no linkage {

    4热度

    2回答

    我注意到一些潜在的问题va_arg宏,用于从可变参数函数接收未命名的参数。考虑以下,简化的示例: #include <stdio.h> #include <stdarg.h> void foo(int n, ...) { va_list ap; const char *s; va_start(ap, n); for (s = va_arg(ap,

    1热度

    1回答

    C++标准说标准转换包括 A standard conversion sequence is a sequence of standard conversions in the following order: (1.1) — Zero or one conversion from the following set: lvalue-to-rvalue conversion, array-to-

    43热度

    1回答

    类模板特优选涉及改写成特化功能模板和确定哪个功能模板是通过对于函数模板的排序规则[temp.class.order]更专门其中用于采摘的规则。考虑这个例子,那么: #include <iostream> template <class T> struct voider { using type = void; }; template <class T> using void_t = type