小编Apr*_*ori的帖子

C++中是否有完整的Implementation-Defined行为列表?

我回答了对我的回答的评论:C求职面试 - 演员和比较,发现我找不到C++认为"实施定义行为"的完整列表.我知道这类事情有3个类别:未定义的行为,实现定义的行为和未指定的行为; 然而,似乎大多数讨论都围绕未定义的行为,并且当讨论实现定义的行为时,最多给出一个例子.一般来说,我倾向于编写很多代码来捕获这个区域,我知道会发生什么样的行为; 我仍然希望能够对其有效性发表评论.我还想抛弃那里,我认为操作社区中有很多误诊是未定义的,而实际上它们是由平台很好地定义的.

请注意,我对给定平台如何选择定义此类行为并不感兴趣,而是对包含C++标准定义的"实现定义"类别中的所有行为的列表感兴趣.

c++ standards

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

C++ 11 VS2013类POD成员初始化

我到处寻找对此的解释,但我很快就会出现.我从VS2013 v120平台工具集中看到了这种行为,但是当我将工具集设置为v90(VS2008工具集)时,一切都未初始化.我相信这是由于C++ 11的一些变化,但它也可能是v120平台工具集的异常.

任何人都可以在C++/C++ 11级别上解释这里发生了什么吗?那就是为什么b归零?为什么j不归零呢?(也就是为什么结构体的行为与类不同)

另外,我知道我输出数据的方式是未定义的行为,请忽略它.这里发布的方式比调试器窗口更容易.这是在32位运行,因此指针的大小与unsigned int相同.

请考虑以下代码:

#include <iostream>

class Foo {
public:
  int a,
      *p;
};

class Bar {
public:
  Bar(){}
  int a,
      *p;
};

struct Jar {
  Jar(){}
  int a,
      *p;
};

int main() {
  Foo f;
  Bar b;
  Jar j;
  std::cout << std::hex; // please excuse this undefined-behavior producing test code, it's more simple to show this than a debugger window on SO (this is on 32-bit)
  std::cout << "f: " << …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio c++11

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

将rvalue转换为const指针是有效的C++吗?

在急速的时刻,需要一个指向对象的指针传递给一个函数.我拿了一个未命名的临时对象的地址,令我惊讶的是它编译了(原始代码的警告进一步向下,缺少下面例子中的const正确性).好奇,我设置了一个受控制的环境,一直有警告,并将警告视为Visual Studio 2013中的错误.

请考虑以下代码:

class Contrived {
  int something;
};

int main() {
  const Contrived &r  = Contrived();                    // this is well defined even in C++03, the object lives until r goes out of scope
  const Contrived *p1 = &r;                             // compiles fine, given the type of r this should be fine. But is it considering r was initialized with an rvalue?
  const Contrived *p2 = &(const Contrived&)Contrived(); // this is handy when calling functions, is it valid? It also …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++03

3
推荐指数
1
解决办法
892
查看次数

标签 统计

c++ ×3

c++11 ×2

c++03 ×1

standards ×1

visual-studio ×1