相关疑难解决方法(0)

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

关于其目标的参考的生命周期

为了阻止我最近给出的答案评论中的论点,我想对以下问题作一些建设性的答案:

  1. 参考的生命周期是否与它所指的对象不同?引用只是其目标的别名吗?
  2. 引用是否可以在格式良好的程序中比其目标更长,而不会导致未定义的行为?
  3. 如果重用为原始对象分配的存储,是否可以引用新对象?
  4. 以下代码是否在不调用未定义行为的情况下演示了上述几点?

Ben Voigt和简化示例代码(在ideone.com运行):

#include <iostream>
#include <new>

struct something
{
    int i;
};

int main(void)
{
    char buffer[sizeof (something) + 40];
    something* p = new (buffer) something;
    p->i = 11;
    int& outlives = p->i;
    std::cout << outlives << "\n";
    p->~something(); // p->i dies with its parent object
    new (p) char[40]; // memory is reused, lifetime of *p (and p->i) is so done
    new (&outlives) int(13);
    std::cout << outlives << …
Run Code Online (Sandbox Code Playgroud)

c++ reference object-lifetime undefined-behavior

6
推荐指数
2
解决办法
2436
查看次数

C++ 遍历的幂等性:指针?参考 ?指针

我的理解

  • 在 C++ 中,普通值可以使用 转换为指向其自身的指针&value,或通过隐式转换转换为对其自身的引用。

  • 与 Rust 不同,引用并不是实际的一等类型,而只是某些类型声明站点接受的二进制限定符。引用可以透明地使用,就好像它们是它们的裁判一样,隐藏内部指针1。因此,我们可以&refToValue立即获取指向裁判的指针。

问题

如果我将指针转换为引用,再转换回指针,我能保证恢复到原始指针吗?Rust 中就是这种情况,但 Rust 再次将一级引用定义为通过指针抽象的“普通”类型。

// Sample code by @chi
T x;
T* ptr1 = &x;
T& ref = *ptr1;
T* ptr2 = &ref;
assert(ptr1 == ptr2); // Is that always true according to the spec?
Run Code Online (Sandbox Code Playgroud)

1:我知道 C++ 标准不要求将引用实现为指针,但我看不出如何以任何其他方式实现它们(不考虑上下文特定的优化),特别是如果我的最后一个问题的答案是“是的”。

c++ pointers reference language-lawyer

4
推荐指数
1
解决办法
141
查看次数