Questions tagged «c++»

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

9
Boost:asio的最佳文档?
boost网站上提供的文档有限。 根据我的理解,普遍的共识是,很难在boost :: asio库中找到好的文档。 真的是这样吗?如果是这样,为什么? 笔记: 我已经找到了(非增强型)Asio网站 -并且该文档看起来与boost网站上的文档相同。 我知道Boost :: asio是新的!我在寻找解决方案而不是找借口。 编辑: 有人建议将 Boost.asio(Christopher Kohlhoff)的作者编写的网络库添加到TR2的标准库中。虽然它不是boost:asio的文档,但确实将其用作TR2提案的基础。由于作者在本文档中投入了更多精力,因此我发现它在某种程度上有所帮助,即使不作为参考,也至少作为概述。
141 c++  boost  boost-asio 

6
创建我自己的迭代器
我正在尝试学习C ++,所以如果这个问题表明缺乏基础知识,请原谅我,事实是,我缺乏基础知识。 我需要一些帮助,以了解如何为自己创建的类创建迭代器。 我有一个“形状”类,其中包含点容器。我有一个“ Piece”类,它引用Shape并定义Shape的位置。零件没有形状,它仅引用形状。 我希望它看起来像Piece是一个点的容器,这些容器与它引用的Shape相同,但是增加了Piece位置的偏移量。 我希望能够遍历Piece的点,就好像Piece本身是一个容器一样。我已经读了一些书,却没有发现任何对我有帮助的东西。我将不胜感激任何指针。
141 c++  iterator 

5
stringstream,string和char *转换混乱
我的问题可以归结为,从stringstream.str().c_str()实时内存返回的字符串在哪里,为什么不能将其分配给const char*? 此代码示例将比我更好地解释它 #include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss("this is a string\n"); string str(ss.str()); const char* cstr1 = str.c_str(); const char* cstr2 = ss.str().c_str(); cout << cstr1 // Prints correctly << cstr2; // ERROR, prints out garbage system("PAUSE"); return 0; } stringstream.str().c_str()可以分配给这个假设的假设const …

7
如何在运行时指定[DllImport]路径?
实际上,我有一个C ++(工作中)的DLL,我想导入到我的C#项目中以调用它的功能。 当我指定DLL的完整路径时,它确实可以工作,如下所示: string str = "C:\\Users\\userName\\AppData\\Local\\myLibFolder\\myDLL.dll"; [DllImport(str, CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2); 问题在于它将是一个可安装的项目,因此用户的文件夹将是不同的(例如:pierre,paul,jack,mum,dad等),具体取决于运行该文件的计算机/会话。 所以我希望我的代码更加通用,例如: /* goes right to the temp folder of the user "C:\\Users\\userName\\AppData\\Local\\temp" then go to parent folder "C:\\Users\\userName\\AppData\\Local" and finally go to the DLL's folder "C:\\Users\\userName\\AppData\\Local\\temp\\myLibFolder" */ string str = …
141 c#  c++  dll  constants  dllimport 


6
在C ++ 11中用“ auto”推论得出的lambda类型是什么?
我认为lambda的类型是函数指针。当我执行以下测试时,我发现它是错误的(演示)。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上面的代码缺少任何意义吗?如果不是,那么typeof用auto关键字推导的lambda表达式是什么?
141 c++  lambda  c++11  typeof  auto 


3
我应该通过const-reference传递std :: function吗?
假设我有一个函数需要一个std::function: void callFunction(std::function<void()> x) { x(); } 我应该x改为通过const-reference吗?: void callFunction(const std::function<void()>& x) { x(); } 这个问题的答案会根据功能的作用而变化吗?例如,如果它是一个类成员函数或构造函数,将其存储或初始化std::function为成员变量。
141 c++  function  reference 

4
如何使用cmake创建共享库?
我已经编写了一个库,该库过去是使用自写的Makefile进行编译的,但是现在我想切换到cmake。树看起来像这样(我删除了所有不相关的文件): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp 因此,我想做的就是将源代码编译到共享库中,然后将其与头文件一起安装。 我发现的大多数示例都使用一些共享库来编译可执行文件,而不仅仅是一个普通的共享库。如果有人可以告诉我一个使用cmake的非常简单的库,这也将很有帮助,因此我可以以此为例。

7
是否必须使逻辑运算符短路?和评估顺序?
ANSI标准是否要求在C或C ++中使逻辑运算符短路? 我很困惑,因为我回想起K&R的书,说您的代码不应该依赖这些操作的短路,因为它们可能不是。有人可以指出标准中逻辑运算总是短路的地方吗?我对C ++最为感兴趣,对于C的回答也很好。 我还记得读(不记得在哪里)未严格定义评估顺序,因此您的代码不应依赖或假定表达式中的函数将按特定顺序执行:在语句末尾,所有引用的函数会被调用,但是编译器可以自由选择最有效的顺序。 标准是否指示此表达式的评估顺序? if( functionA() && functionB() && functionC() ) cout<<"Hello world";


16
C ++静态虚拟成员?
在C ++中,是否有可能既有static和又有成员函数virtual?显然,没有一种简单的方法(static virtual member();编译错误),但是至少有一种方法可以达到相同的效果吗? IE浏览器: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() const; }; struct SomeObject : public Object { static virtual const TypeInformation &GetTypeInformation() const; }; GetTypeInformation()在实例(object->GetTypeInformation())和类(SomeObject::GetTypeInformation())上使用都是有意义的,这对于比较很有用,对模板也很重要。 我能想到的唯一方法是针对每个类编写两个函数/一个函数和一个常量,或者使用宏。 还有其他解决方案吗?
140 c++  static  virtual 

2
#pragma是否曾经是C ++ 11标准的一部分?
传统上,避免C ++中包含多个标头的标准且可移植的方法是使用#ifndef - #define - #endif预编译器指令方案,该方案也称为宏保护方案(请参见下面的代码段)。 #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif 但是,在大多数实现/编译器中(请参见下图),还有一个更“优雅”的替代方案,其作用与称为的宏保护方案相同#pragma once。#pragma once与宏保护方案相比,它具有多个优点,包括更少的代码,避免名称冲突以及有时提高了编译速度。 经过研究,我意识到尽管#pragma once几乎所有已知的编译器都支持伪指令,但是伪#pragma once指令是否属于C ++ 11标准还是有一定的困惑。 问题: 有人可以澄清#pragma once指令是否属于C ++ 11标准吗? 如果它不是C ++ 11标准的一部分,是否有任何计划将其包含在更高版本中(例如C ++ 14或更高版本)? 如果有人可以进一步详细说明使用这两种技术中的任何一种(例如,宏观卫士与#pragma once)的优势/劣势,那也很好。

12
方便的C ++结构初始化
我正在尝试寻找一种方便的方法来初始化“ pod” C ++结构。现在,考虑以下结构: struct FooBar { int foo; float bar; }; // just to make all examples work in C and C++: typedef struct FooBar FooBar; 如果我想方便地用C(!)初始化它,我可以简单地写: /* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C 请注意,我想明确地避免使用以下表示法,因为如果将来我在结构中进行任何更改,它都会令我不寒而栗: /* B …

3
哪些iomanip操纵器是“粘性”的?
stringstream由于我错误地认为std::setw()这会影响每次插入的字符串流,直到我显式更改它为止,最近我创建一个问题。但是,插入后始终未设置。 // With timestruct with value of 'Oct 7 9:04 AM' std::stringstream ss; ss.fill('0'); ss.setf(ios::right, ios::adjustfield); ss << setw(2) << timestruct.tm_mday; ss << timestruct.tm_hour; ss << timestruct.tm_min; std::string filingTime = ss.str(); // BAD: '0794' 因此,我有很多问题: 为什么setw()这样呢? 这样还有其他操纵器吗? 是否有之间的行为差异std::ios_base::width()和std::setw()? 最后,是否有在线参考清楚地记录了这种行为?我的供应商文档(MS Visual Studio 2005)似乎没有清楚地表明这一点。
140 c++  c++-faq 

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.