小编Arm*_*yan的帖子

C和C++中的积分/算术类型的大小保证

我知道C++标准明确保证了大小char,signed charunsigned char.此外,它提供了保证,比方说,short至少是一样大的char,int大如short等,但有关的,比如说绝对值没有明确的保证,sizeof(int).这是我头脑中的信息,我和它幸福地生活在一起.然而,不久之前,我在SO中找到了一条评论(找不到它),在C long中保证至少有4个字节,而且这个要求是由C++"继承"的.是这样的吗?如果是这样,我们对C++中算术类型的大小有什么其他的隐含保证?请注意,我对这个问题中不同平台的实际保证完全不感兴趣,只是理论上的 那些.

c c++ sizeof primitive-types

9
推荐指数
2
解决办法
3456
查看次数

C++风格问题:#include是什么?

考虑这个翻译单位:

#include <map>
#include <string>
int main()
{
   std::map<std::string, std::size_t> mp;
   mp.insert(std::make_pair("hello", 42)); 
}
Run Code Online (Sandbox Code Playgroud)

这个翻译单元有两件事困扰着我,他们是

  • 的std ::为size_t
  • 的std :: make_pair

我刚才假设<cstddef><utility>必须已#include被D <string><map>.
这个假设有多合适?至少make_pair我认为有一个非常强大的保证,因为地图成员接口使用std::pair.因为std::size_t没有正式的保证,但是一旦你包括map或者,它很可能是可用的string.第一个风格问题是,您是否明确包含<cstddef><utility>在此翻译单元中?

这部分部分处理了已经包含的一些标题的不确定性.但是,问题的第二部分.假设我们有这个

//f.h
#ifndef BIG_F_GUARD
#define BIG_F_GUARD
#include <string>
std::string f();
#endif   

//f.cpp
#include "f.h"
std::string f()
{
    std::string s;
    return s;
}
Run Code Online (Sandbox Code Playgroud)

第二个问题是:你明确#include <string>到f.cpp吗?

我想我的问题很明确.顺便说一句.这两个问题后面都是一个很大的WHY:)谢谢.

c++ coding-style include

9
推荐指数
1
解决办法
751
查看次数

C++翻译单元的语法

我很长一段时间以来的理解是,在预处理器运行之后,C++转换单元是一系列声明(让我提醒任何定义也是一个声明).

很多人都赞同这个说法,但没有人给出反例.但我自己发现这个让我烦恼的例子:

int x;       //declaration

;            // ??? EMPTY DECLARATION?

int main()   //dec
{            //la
}            //ration
Run Code Online (Sandbox Code Playgroud)

这与MSVC和在线照片很好地编辑.我知道标准定义了一个空语句,但我从未听说过空声明.所以,我看到三个选择:

  • 我的理解是正确的,标准定义了一个空声明
  • 我的理解是正确的,但标准没有定义空声明,上面的翻译是不正确的
  • 我的理解是不正确的,即C++ TU不是一系列声明

请帮我解除疑惑.谢谢

c++ grammar declaration

9
推荐指数
2
解决办法
1295
查看次数

强制终止进程时的进程退出代码

当我们使用任务管理器结束进程命令在Windows中终止进程时,进程是否仍会返回退出代码?如果是这样,它返回什么退出代码?谢谢

windows process exit-code

9
推荐指数
1
解决办法
5277
查看次数

比较和交换原子操作与负载链接/存储条件操作

在x86处理器下,我不确定比较和交换原子操作和加载链接/存储条件操作之间的区别.后者比前者更安全吗?情况是第一个比第二个好吗?

c++ atomic compare-and-swap

9
推荐指数
2
解决办法
4462
查看次数

glPolygonOffset中factor参数的含义和用法

我很难理解glPolygonOffset函数中第一个参数的含义.

void glPolygonOffset(GLfloat  factor, GLfloat units);
Run Code Online (Sandbox Code Playgroud)

官方文件说明了这个因素

指定用于为每个多边形创建变量深度偏移的比例因子.

然后

在从适当顶点的深度值插值后,每个片段的深度值将被偏移.偏移的值是因子×DZ + r×单位,其中DZ是相对于多边形的屏幕区域的深度变化的度量,并且r是保证给定给定的可解析偏移的最小值实现.

我明白了什么runit是.我不明白的是什么DZ,即"测量多边形屏幕区域的深度值变化"是什么意思,为什么我需要将因子设置为0以外的任何值.

如果我想让我的线框偏移,我只需要在深度值上添加/减少几个单位,不是吗?factor参数(以及文档中提到的DZ)的含义,用途和用法示例是什么?

c opengl graphics depth-buffer depth-testing

9
推荐指数
1
解决办法
6956
查看次数

为什么--list.end()编译?

  • list's end()返回一个过去的迭代器的副本,对吗?
  • 因此,list.end()是一个右值,对吧?
  • 为列表迭代器重载的 - operator-function采用非const引用,对吧?
  • 你不能将rvalues绑定到非const引用,对吗?

怎么会这样呢

std::list<int> lst;
// ... 
--l.end();` 
Run Code Online (Sandbox Code Playgroud)

编译?

正确指出,我的第三点不一定正确.但那么这个代码又如何编译呢?

struct A{};

void f(A&)
{

}
A a()
{
    return A();
}

int main()
{
    f(a());
}
Run Code Online (Sandbox Code Playgroud)

c++ stl list rvalue lvalue

9
推荐指数
1
解决办法
217
查看次数

是否在内联系中定义的友元函数是否内联?

如果在类中定义了成员函数,则它是内联函数.例如

struct X
{
   void mem_f() {} //mem_f is inline
};
Run Code Online (Sandbox Code Playgroud)

我的问题是在类中定义的非成员友元函数是否也是自动内联的.

例如

struct Y
{ 
   friend void friend_f() {} //is friend_f inline?
};
Run Code Online (Sandbox Code Playgroud)

标准中的相关引用/ paragraph_no将非常受欢迎.谢谢.

c++ inline friend

8
推荐指数
1
解决办法
1962
查看次数

类定义中的分号

我正在读这篇文章,这里有一个代码示例:

struct X {
  static bool f( int* p )
  {
    return p && 0[p] and not p[1:>>p[2];
  };
};
Run Code Online (Sandbox Code Playgroud)

问题是:兼容编译器应该提供多少错误:

我回答了一个,因为这段代码相当于

struct X {
  static bool f( int* p )
  {
    return p && p[0] && ! p[1] > p[2];
  };
};
Run Code Online (Sandbox Code Playgroud)

而且我认为静态函数定义之后的分号将是一个错误.但萨特先生说0并解释(除了我所理解的事情)

函数声明结束时允许使用"额外"分号.

我的问题是:

  • 标准中的哪些文字允许这样做?
  • 这仅仅是指成员函数吗?
  • 分号是否可以出现在两个成员之间或类定义中的任何其他位置,如

     struct X
     {
       int a;;;;int b; //Legal?
     };
    
    Run Code Online (Sandbox Code Playgroud)

c++ syntax

8
推荐指数
1
解决办法
3925
查看次数

将char []数组转换为String

假设我有一个数组:

char[] chars={'X','X','m','a','t','t','X','X'};
Run Code Online (Sandbox Code Playgroud)

我想创建值为"matt"的String,所以从字符索引2到5开始.是否有内置方法来实现这一点,或者我必须进行循环?

java arrays

8
推荐指数
2
解决办法
407
查看次数