Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

8
为什么预处理器宏是邪恶的,还有哪些替代方法?
我一直问这个问题,但是我从来没有收到一个很好的答案。我认为几乎所有程序员甚至在编写第一个“ Hello World”之前都遇到过诸如“永远不应该使用宏”,“宏是邪恶的”之类的短语,我的问题是:为什么?这么多年后,有了新的C ++ 11,还有真正的替代选择吗? 最简单的部分是关于#pragma特定于平台和编译器的宏,例如,它们在大多数情况下都具有严重缺陷,例如#pragma once在至少两种重要情况下容易出错:在不同路径中具有相同名称,并且在某些网络设置和文件系统中。 但是总的来说,宏及其用法的替代方案又如何呢?

6
错误:: make_unique不是'std'的成员
我正在尝试编译代码审查中发布的以下线程池程序以对其进行测试。 /codereview/55100/platform-independant-thread-pool-v4 但是我得到了错误 threadpool.hpp: In member function ‘std::future<decltype (task((forward<Args>)(args)...))> threadpool::enqueue_task(Func&&, Args&& ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>> (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘>’ token auto package_ptr = make_unique<task_package_impl<R, decltype(bound_task)>>(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: …

4
常量正确性可以提高性能吗?
我已经读过很多遍了,在C或C ++代码中强制执行const正确性不仅是关于可维护性的好习惯,而且还可以使您的编译器执行优化。但是,我也读过完全相反的内容,它完全不影响性能。 因此,您是否有一些示例说明const正确性可以帮助您的编译器改善程序性能?

10
C / C ++中的最小双精度值
在C(++)程序中是否存在标准和/或可移植的方法来表示最小的负值(例如,使用负无穷大)? float.h中的DBL_MIN是最小的正数。
92 c++  c  math 

12
C ++ Boost:对boost :: system :: generic_category()的未定义引用
我试图将Boost库包含在我的项目中,并且一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu 12.10上,尝试手动读取站点上的说明来安装库,但是标头以及使用前要构建的库出现错误。 然后,我通过terminalby安装了库sudo apt-get install libboost-all-dev。此后,在我的代码块程序中,可以包含类似的标题,#include <boost/regex.hpp>但是当我尝试包含Filesystem库的标题(#include "boost/filesystem/operations.hpp" )时,出现以下错误: /usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'| 我不确定如何解决此错误(特别是在Linux上的代码块中)。我真的可以在这里使用一些帮助。 编译器:Gcc 程序代码:仅尝试包含上述文件系统operations.hpp文件。 从代码块生成日志: Build started on: 20-11-2012 at 18:02.53 Build ended on: 20-11-2012 at 18:02.54 -------------- Build: Debug in libopenFrameworks --------------- Target is up to date. -------------- Build: Debug in reader1 --------------- make -s -f …
92 c++  linux  boost  codeblocks 

2
“使用ODR”是什么意思?
这只是在另一个问题的背景下出现的。 显然,仅在使用ODR时才实例化类模板中的成员函数。有人可以解释这到底意味着什么。在上一个定义规则(ODR),维基百科的文章并没有提及“ ODR使用”。 但是该标准将其定义为 除非其对象满足在常量表达式中出现的要求(5.19)并且立即应用左值到右值转换(4.1),否则将使用其名称显示为可能评估的表达式的变量。 在[basic.def.odr]中。 编辑:显然这是错误的部分,整个段落包含针对不同事物的多个定义。这可能与类模板成员函数有关: 如果非重载函数的名称显示为可能评估的表达式或一组候选函数的成员,则如果非重载函数是纯虚函数,则如果通过重载解析从潜在评估的表达式中进行引用而选择了非重载函数,则该名称不会被使用函数及其名称未明确限定。 但是我不明白,该规则如何在多个编译单元中起作用?如果显式实例化类模板,是否会实例化所有成员函数?

4
尾随返回类型的语法样式是否应该成为新的C ++ 11程序的默认样式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 C ++ 11支持新的函数语法: auto func_name(int x, int y) -> int; 当前,此函数将声明为: int func_name(int x, int y); 新样式似乎尚未被广泛采用(例如在gcc stl中) 但是,这种新样式是否应该在新的C ++ 11程序中到处都是首选,还是仅在需要时使用? 就个人而言,我尽可能地选择旧样式,但是混合样式的代码库看起来很难看。

3
C ++ std :: ref(T)和T&?之间的区别
我对此程序有一些疑问: #include <iostream> #include <type_traits> #include <functional> using namespace std; template <typename T> void foo ( T x ) { auto r=ref(x); cout<<boolalpha; cout<<is_same<T&,decltype(r)>::value; } int main() { int x=5; foo (x); return 0; } 输出为: false 我想知道,如果std::ref不返回对象的引用,那它有什么作用?基本上,两者之间有什么区别? T x; auto r = ref(x); 和 T x; T &y = …
92 c++  reference  ref 



3
Constexpr与宏
我应该在哪里使用宏,哪里应该使用constexpr?它们不是基本相同吗? #define MAX_HEIGHT 720 与 constexpr unsigned int max_height = 720;
92 c++  c++11  macros  constexpr 

5
为什么此结构大小为3而不是2?
我已经定义了这个结构: typedef struct { char A:3; char B:3; char C:3; char D:3; char E:3; } col; 该sizeof(col)给我3的输出,但它不应该是2?如果仅评论一个元素,sizeof则为2。我不明白为什么:3个元素的5个元素等于15位,并且小于2个字节。 定义这样的结构时是否存在“内部尺寸”?我只需要澄清一下,因为从到目前为止的语言概念来看,我期望的大小为2字节,而不是3字节。
91 c++  c  struct 

3
为什么最负的int值会导致有关歧义函数重载的错误?
我正在学习C ++中的函数重载,并遇到了以下问题: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } 据我了解,该int范围内给出的任何值(在我的情况下int为4字节)都将被调用,display(int)而该范围外的任何值都将是模棱两可的(因为编译器无法确定要调用哪个函数)。int除最小值外,它对于整个值范围均有效,即-2147483648编译失败并显示错误 重载的呼叫display(long int)是模棱两可的 但是对取相同的值int并打印该值将给出2147483648。我真的对这种行为感到困惑。 为什么仅当传递最大负数时才会观察到此行为?(如果将a short与-32768-一起使用,其行为是相同的-实际上,在任何情况下,负数和正数具有相同的二进制表示形式) 使用的编译器:g ++(GCC)4.8.5

6
带有GCC的预编译头文件
任何人都可以使用GCC预编译头文件取得成功吗?我的尝试没有运气,我也没有看到很多关于如何设置它的好例子。我已经尝试过cygwin gcc 3.4.4,并在Ubuntu上使用4.0。

2
除运算符优先级外,什么时候附加括号什么时候起作用?
C ++中的括号在许多地方使用:例如,在函数调用和分组表达式中,以覆盖运算符优先级。除了非法的多余括号(例如在函数调用参数列表周围)之外,C ++的一个通用而非绝对规则是,多余的括号永远不会损害: 5.1主表达式[expr.prim] 5.1.1常规[expr.prim.general] 6带括号的表达式是一个主表达式,其类型和值与附带的表达式相同。括号的存在不影响表达式是否为左值。除非另有说明,否则带括号的表达式可以在与可以使用封闭表达式的上下文完全相同的上下文中使用,并且具有相同的含义。 问题:除了覆盖基本的运算符优先级以外,多余的括号还会在哪些上下文中更改C ++程序的含义? 注意:我认为指针到成员语法的限制(&qualified-id不带括号)不在范围内,因为它限制了语法,而不是允许两种具有不同含义的语法。同样,在预处理程序宏定义中使用括号也可以防止不必要的运算符优先级。

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.