相关疑难解决方法(0)

为什么Java有一个中央API文档,而不是C++?

问题几乎解释了这一切.我一直在想为什么Java有很好的,有组织的和集中的API文档,但C++库定义似乎分散在互联网上?

是否因为Sun在使Java API文档易于访问方面付出了一些努力?提前致谢.

c++ java api

6
推荐指数
1
解决办法
1396
查看次数

(i + 1)<ii和(i + 1)> ii两者都是真的吗?

我正在学习C程序但是我遇到了一些奇怪的行为,我期待一个结果,但是这样打印出两个结果

$ ./a.out
yes1 0x80000000
yes3 0x80000000
Run Code Online (Sandbox Code Playgroud)

怎么可能呢?
我无法理解结果.

OS : x86_64 Ubuntu Linux
C compiler : gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1

gcc -O2 weird.c

#include <stdio.h>

int main() {

    int i = 0x7fffffff;
    int ii = 0x0000000f;

    if ((i + 1) < ii)
        printf ("yes1 %#x\n", i + 1);

    if ((i + 1) == ii)
        printf ("yes2 %#x\n", i + 1);

    if ((i + 1) > ii)
        printf ("yes3 %#x\n", i + 1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c integer-overflow undefined-behavior

6
推荐指数
1
解决办法
252
查看次数

C++中值类别定义中"身份"的含义是什么?

简而言之,您可以回答有关身份的部分,谢谢.我对这个问题的主要关注点是从2开始.关于身份,我只是试图提供我当前理解的背景/背景,这样可以帮助你在写答案时决定深度.


我想了解C++中类型系统和值类别的大图.我在网上搜索/阅读了很多问题和资源,但是每个人都有一个明确的解释,所以我真的很困惑.我会列出我无法掌握的部分,如果有人能提出想法的话

  1. cppreference.com上,第一行:

    对象,引用,函数(包括函数模板特化)和表达式都有一个名为type的属性,它既限制了这些实体所允许的操作,又为其他通用的位序列提供了语义含义.

    我的问题:

    • 表达式有什么意思?它是评估后最终结果的类型吗?
    • 我不想在现阶段学习模板,这会妨碍学习基本部分(从你专家的角度来看)吗?我花了一些时间才意识到转发引用和右值引用是不同的东西,前者用于模板.
  2. 价值类别:

    我读到了这个答案 - 什么是rvalues,lvalues,xvalues,glvalues和prvalues?,这句话困扰我很多是身份,它也出现在cppreference.com上 - 值类别(第5行,glvalue).

    我的问题:我可以说identity ==我可以为它分配一个新值吗?

    • 我看到有人使用word / pointer这个词,但是那个has identity iff has address/pointer?我想要精确的术语.
    • 我在阅读cppreference.com时遇到了bit-field的想法,似乎给出了一个位字段结构a,它的位字段a.m没有地址?这是使用单词标识而不是地址/指针的原因吗?
    • 我发现了一篇博文解释这个,但它的左值定义是违反直觉的:左值表示一个资源无法重用的对象,为什么不呢?

c++ static-typing lvalue language-lawyer

6
推荐指数
1
解决办法
421
查看次数

如何比较给定指针和类型的两个值

假设我有一个存储一些数据的类,

class Value {
public:
    enum class Type {
        int_type,
        float_type,
        double_type,
        bool_type
    };

    friend bool operator==(const Value& lhs, const Value& rhs) {
        //  how to make this function clean and concise?
    }

private:
    void* ptr;
    Type type;
};
Run Code Online (Sandbox Code Playgroud)

ptr指向基础值并type指示ptr应如何转换。

为了比较Value对象,我绝对可以列出所有可能的类型组合,但是代码将很难维护。喜欢:

if (lhs.type == Type::int_type && rhs.type == Type::float_type) {
    return *static_cast<int*>(lhs.ptr) == *static_cast<float*>(rhs.type);
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何减少复杂性?

更新

我希望此类为动态类型,这意味着我可以执行以下操作:

Value v("abc");       // v is now a string
v = 123;              // v is …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
1
解决办法
149
查看次数

为什么 C++11 要求 std::sort 有 WCET O(n log n)?

因为C++11C++ 标准库(参见标准草案版本的第 25.4.1.1 节)要求std::sort算法具有渐近的最坏情况执行时间O(n log n)而不是平均情况

在更改之后,例如quicksort算法不再符合规范。这是在指出错误报告为LLVM的libc++。相反,通常使用具有最坏情况运行时间的算法introsortor 。pdqsortO(n log n)

是否有任何关于这种变化动机的文件?是否有一些轶事或事件导致了这种变化?

c++ sorting algorithm complexity-theory c++11

6
推荐指数
0
解决办法
151
查看次数

每个C++程序员都应该阅读ISO标准才能变得专业吗?

每个C++程序员都应该阅读ISO标准才能变得专业吗?

c++

5
推荐指数
3
解决办法
719
查看次数

我应该阅读哪个C++ ISO标准的PDF?

有时,我想自己从C++标准中搜索答案.阅读标准可能有助于我概述所提出的语言原则.

通过搜索互联网,我感到困惑的是充斥着C++论坛和帮助网站.它们提供各种PDF文件供阅读.

我不知道应采用哪个PDF文件和/或哪个版本.

我找到了几个网站:

我想知道是否有一个标准发布的网站.在解决问题时我应该参考哪个版本?有人说C++ 98,有些人说C++ 11,甚至是最新的工作草案.(许多草稿令我困惑).


编辑
我从标准中找到了一个有用的信息,其中写道:

除了最终的标准/报告外,所有C++委员会文件都是免费公开发布的,包括所有工作草案,其中许多与发布的标准非常接近.2012年1月的工作草案包含C++ 11标准以及次要的编辑更改.

2012年1月的工作草案是N3337.
希望这能帮到你们.


编辑
来自 Wiki C++ 11,它写道:

与已发布的C++ 11标准最相似的工作草案是2012年1月12日的N3337; 它只有C++ 11标准的编辑更正.

c++ standards iso

5
推荐指数
1
解决办法
8714
查看次数

我的解释是否正确n3797 8.5.3/5?

n3797中第8.5.3/5段:

对类型"cv1 T1"的引用由类型"cv2 T2"的表达式初始化,如下所示:

  • 如果引用是左值引用和初始化表达式

    • 是左值(但不是位域),"cv1 T1"与"cv2 T2"引用兼容,或者

    • 具有类类型(即,T2是类类型),其中T1与T2不是引用相关的,并且可以转换为类型为"cv3 T3"的左值,其中"cv1 T1"与"cv3"引用兼容T3"(通过枚举适用的转换函数(13.3.1.6)并通过重载决策(13.3)选择最佳转换函数来选择此转换),

...

英语不是我的母语,但在我看来,粗体这个短语(我的重点)给出了T1可以转换为cv3 T3类型左值的想法,我认为这是不正确的.根据我的理解,T2是必须转换为cv3 T3的类型,例如:

struct B : A { operator int&(); } b;    
int& ir = B();
Run Code Online (Sandbox Code Playgroud)

显示.

c++ reference language-lawyer c++11 c++14

5
推荐指数
1
解决办法
360
查看次数

什么是C/C++中的"安全"和"不安全"代码?

C/C++中"安全"和"不安全"代码有什么区别?

我在文章中读到"C++在导致严重安全漏洞的方面不安全":Rust如何与其他语言进行比较.什么是不安全的代码不安全?

c c++

5
推荐指数
1
解决办法
4748
查看次数

为什么可以针对非易失性访问重新排序此易失性访问?

下面的代码示例来自一个介绍其效果的中文博客volatile.左边是C代码; 另一个是生成的汇编代码.

// cordering.c                                gcc -O2 -S -masm=intel cordering.c

int A;
volatile int B;
void foo()                                    mov   eax, DWORD PTR B[rip]
{                                             mov   DWORD PTR B[rip], 0
    A = B + 1;                                add   eax, 1
    B = 0;                                    mov   DWORD PTR A[rip], eax
}                                             ret
Run Code Online (Sandbox Code Playgroud)

正如我们在汇编代码中看到的那样,副作用A放在副作用之后B,即使Bvolatile合格的.但是,cppreference.com说:

[W]在单个执行线程中,易失性访问不能优化或重新排序,具有在易失性访问之前排序排序的另一个可见副作用.

这里的副作用A之前是排序的B,所以我认为编译器执行此操作是非法的.我对吗?


作为补充,博客说如果我们想要保证a volatilenon-volatiletype 之间的顺序,我们需要同时做到volatile:

// cordering.c                                gcc …
Run Code Online (Sandbox Code Playgroud)

c++ volatile non-volatile

5
推荐指数
1
解决办法
110
查看次数