Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。

4
const auto有什么意思吗?
我认为问题很明确。将auto关键字自动检测常量性,或总是返回一个非const类型,即使有如。函数的两个版本(一个返回const,另一个不返回)。 仅作记录,我确实const auto end = some_container.end()在for循环之前使用过,但我不知道这是否有必要甚至与normal不同auto。
82 c++  c++11  const 


3
在C ++中,有符号整数溢出仍然是未定义的行为吗?
众所周知,有符号整数溢出是未定义的行为。但是C ++ 11cstdint文档中有一些有趣的东西: 有符号整数类型,其宽度分别精确地为8、16、32和64位,没有填充位,并且对负值使用2的补码(仅在实现直接支持该类型时提供) 见链接 这里是我的问题:由于标准明确地说,对int8_t,int16_t,int32_t和int64_t负数是2的补,还是溢出这些类型的未定义的行为吗? 编辑我检查了C ++ 11和C11标准,这是我发现的内容: C ++ 11,第18.4.1节: 标头定义了与C标准中的7.20相同的所有函数,类型和宏。 C11,第7.20.1.1节: typedef名称intN_t指定宽度为N,无填充位和二进制补码表示形式的带符号整数类型。因此,int8_t表示具有正好8位宽度的这种有符号整数类型。



6
Bjarne是否对ADL的示例有误,还是我遇到了编译器错误?
我正在阅读有关C ++编程语言的第四版(由Bjarne Stroustrup撰写),参数依赖查找。这是报价(26.3.6,过度攻击性ADL): 依赖参数的查找(通常称为ADL)对于避免冗长非常有用(14.2.4)。例如: #include <iostream> int main() { std::cout << "Hello, world" << endl; // OK because of ADL } 如果没有依赖于参数的查找,endl将找不到操纵器。实际上,编译器会注意到to的第一个参数<<是在中ostream定义的std。因此,它endl在中std查找并找到它(在中<iostream>)。 这是编译器(C ++ 11模式)产生的结果: prog.cpp: In function ‘int main()’: prog.cpp:4:36: error: ‘endl’ was not declared in this scope std::cout << "Hello, world" << endl; ^ 这是编译器还是本书中的错误。标准怎么说? 更新: 我需要澄清一下。我知道正确的答案是使用std::endl。问题是关于书中的文字。正如Lachlan Easton所说,这不仅仅是错字。整个段落(可能)是错误的。如果这本书是由另一位(鲜为人知的)作者撰写的,我可以接受这种错误,但是由于(它仍然是)由Bjarne撰写,所以我一直(并且仍然)对此表示怀疑。

4
C ++ 11是否允许vector <const T>?
容器要求已从C ++ 03更改为C ++ 11。尽管C ++ 03具有全面的要求(例如,副本的可构造性和向量的可分配性),但C ++ 11定义了每个容器操作的细粒度要求(第23.2节)。 结果,您可以例如将可复制构造但不可分配的类型(例如具有const成员的结构)存储在向量中,只要您仅执行某些不需要分配的操作(构造且push_back为此类操作)即可;insert不是)。 我想知道的是:这是否意味着该标准现在允许vector&lt;const T&gt;?我看不出有任何理由不应该-const T与具有const成员的结构一样,是一种可复制构造但不能分配的类型-但我可能错过了一些东西。 (让我觉得我可能错过了一些东西的部分原因是,如果您尝试实例化vector&lt;const T&gt;,gcc主干会崩溃并烧毁,但是vector&lt;T&gt;对于T具有const成员的地方也很好)。
81 c++  vector  c++11  constants 

4
内存对齐:如何使用alignof / alignas?
我现在正在使用共享内存。 我无法理解alignof和alignas。 cppreference不清楚:alignof返回“ alignment”,但是什么是“ alignment”?要为下一个要对齐的块添加的字节数?填充尺寸?堆栈溢出/博客条目也不清楚。 有人能解释清楚alignof和alignas?

6
使用C ++ 11复制代码
我目前正在从事一个项目,但遇到以下问题。 我有一个C ++方法,希望以两种不同的方式工作: void MyFunction() { foo(); bar(); foobar(); } void MyFunctionWithABonus() { foo(); bar(); doBonusStuff(); foobar(); } 而且我不想重复我的代码,因为实际功能要长得多。问题是在任何情况下都不能在调用MyFunction而不是MyFunctionWithABonus时增加程序的执行时间。这就是为什么我不能只具有通过C ++比较检查的布尔参数。 我的想法是使用C ++模板虚拟地复制我的代码,但是我无法想到一种无需额外执行时间且无需复制代码的方法。 我不是模板专家,所以我可能会缺少一些东西。 你们有什么主意吗?还是在C ++ 11中这是不可能的?
80 c++  c++11  templates 

2
在C ++中,空std :: shared_ptr和空std :: shared_ptr有什么区别?
该cplusplus.comshared_ptr页面召唤出一个区分空 std::shared_ptr和空 shared_ptr。该cppreference.com页面没有明确叫出区别,但同时使用“空”,并比较nullptr其描述std::shared_ptr行为。 空和空值之间有区别shared_ptr吗?这种混合行为指针有什么用例?非空nullshared_ptr甚至有意义吗?在正常使用情况下(如果您没有显式构造一个)会出现一个空但非空的情况shared_ptr吗? 如果您使用的是Boost版本而不是C ++ 11版本,这些答案是否会改变?
80 c++  c++11  shared-ptr 

7
为什么需要显式编写'auto'关键字?
我正在从C ++ 98迈向C ++ 11,并且已经熟悉了auto关键字。我想知道为什么我们需要显式声明auto编译器是否能够自动推断类型。我知道C ++是一种强类型语言,这是一条规则,但是如果不显式声明一个变量,auto是否有可能实现相同的结果?
80 c++  c++11  auto 

3
什么是次正规浮点数?
isnormal()参考页告诉您: 确定给定的浮点数arg是否正常,即既不是零,次正规,无穷也不是NaN。 一个数字为零,无穷大或NaN很清楚这意味着什么。但这也说不合正常。什么时候是次正规的?

4
C ++ 0x和C ++ 11有什么区别?
我在SO上看到这两个术语的混合用法。 维基百科说 C ++ 11,以前也称为C ++ 0x ... 但我不确定为什么。 为什么先叫C ++ 0x,然后叫C ++ 11? 另外,x代表什么?我的猜测-像变量一样?
80 c++  c++11 

12
C ++ 11中未使用的参数
在c ++ 03及更早版本中,要禁用有关未使用参数的编译器警告,我通常使用以下代码: #define UNUSED(expr) do { (void)(expr); } while (0) 例如 int main(int argc, char *argv[]) { UNUSED(argc); UNUSED(argv); return 0; } 但是宏并不是c ++的最佳实践,因此。c ++ 11标准会出现更好的解决方案吗?我的意思是可以摆脱宏吗? 谢谢大家!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.