我有以下类(剥离以仅包含相关部分):
#include <string>
class Text
{
private:
std::string _text;
public:
Text(std::string&& text) :
_text(std::move(text))
{
}
operator const std::string&() const
{
return _text;
}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我想获得一个const std::string&
,我可以这样做而不会受到任何惩罚:
Text text("fred");
auto& s = static_cast<std::string>(text);
Run Code Online (Sandbox Code Playgroud)
或者这将构建一个std::string
我最终获得引用的中间体?这种情况是否有标准方法?我是C++的新手.
我有一个嵌套的for循环,它生成以下程序集:
# branch target labels manually added for readability
002E20F8 mov ebx,esi
002E20FA mov dword ptr [ebp-10h],3B9ACA00h
002E2101 sub ebx,edi
002E2103 add ebx,7
002E2106 shr ebx,3
002E2109 nop dword ptr [eax]
outer_loop:
002E2110 xor eax,eax
002E2112 xor ecx,ecx
002E2114 cmp edi,esi
002E2116 mov edx,ebx
002E2118 cmova edx,eax
002E211B mov eax,edi
002E211D test edx,edx
002E211F je main+107h (02E2137h) ;end_innerloop
inner_loop:
002E2121 movsd xmm0,mmword ptr [eax]
002E2125 inc ecx ; inc/addsd swapped
002E2126 addsd xmm0,mmword ptr [k]
002E212B add eax,8
002E212E movsd …
Run Code Online (Sandbox Code Playgroud) 我想传递std::unique_ptr
给一个类的构造函数,该类将获取所拥有的数据的所有权std::unique_ptr
.
在编译器处理它们如何使其中一个更受欢迎的方法foo
和方法之间是否存在任何差异bar
?
foo
类:
template <class T>
class foo
{
std::unique_ptr<T> data_;
public:
foo(std::unique_ptr<T>&& data) :
data_{ std::forward<std::unique_ptr<T>>(data) }
{
}
};
Run Code Online (Sandbox Code Playgroud)
bar
类:
template <class T>
class bar
{
std::unique_ptr<T> data_;
public:
bar(std::unique_ptr<T> data) :
data_{ std::move(data) }
{
}
};
Run Code Online (Sandbox Code Playgroud) 我正在通过 clang-cl 在 Windows 上使用 Clang 5,并且-fno-rtti
在使用std::function
.
这是我无法编译的示例:
#include <functional>
void foo(std::function<void()> ra2)
{
}
int main()
{
auto bar = []()
{
};
foo(bar);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
命令行:
clang-cl test.cpp -Xclang -fno-rtti
Run Code Online (Sandbox Code Playgroud)
错误是:
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC\14.13.26128\include\functional(435,11): error:
cannot use typeid with -fno-rtti
return (typeid(_Callable));
^
Run Code Online (Sandbox Code Playgroud)
这让我感到惊讶,有没有办法std::function
在没有 RTTI 的情况下在 Clang 中使用lambdas?该文件说,只有target
和target_type
上std::function
应该需要RTTI。我可以推出自己的 版本std::function
,但不得不这样做似乎很可惜。
如果我将 MSVC 与编译器标志一起使用,它工作正常/GR-
。
是否可以使用haxe编译器将haxe代码直接编译为.NET DLL而不是EXE?
考虑一个我不想修改的简单C++类:
class foo {};
Run Code Online (Sandbox Code Playgroud)
然后,如果我执行以下操作,我将调用移动赋值运算符:
foo f{};
f = foo{};
Run Code Online (Sandbox Code Playgroud)
有没有办法在不修改foo
或使用这样的中间件的情况下调用复制赋值g
:
foo f{};
foo g{};
f = g;
Run Code Online (Sandbox Code Playgroud)
差不多好像有std::dont_move
!
是否有等价物std::stringstream
可以让我构建一个std::u32string
?如果不是,我怎么std::u32string
能从大量由char32_t
数据组成的可变长度文本片段中构建一个?
我有一个运行 macOS 10.12 的 Jenkins 构建服务器。
我正在使用最新的 Clang 10(不是 AppleClang)和 CMake 3.17 编译 C++ 应用程序。
我得到的错误是:
The C++ compiler
"/Users/XXX/llvm/bin/clang++"
is not able to compile a simple test program.
It fails with the following output:
ld: unknown option: -platform_version
clang-10: error: linker failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
这适用于同一服务器上的 Clang 9,而 Clang 10 在 macOS 10.15 上运行良好,所有其他构建工具和源文件都相同(Jenkins 每次都运行一个干净的构建)。它似乎是 Clang 10 和 macOS 10.12 的组合。Clang 9 和 Clang 10 之间有什么变化会导致这种情况吗?
我像这样调用 CMake:
cmake -DCMAKE_OSX_SYSROOT="${macos_sdk}" \
-DCMAKE_C_COMPILER="${llvm_bin}/clang" \
-DCMAKE_CXX_COMPILER="${llvm_bin}/clang++" \
-DCMAKE_OSX_ARCHITECTURES=${architectures} \
-DCMAKE_BUILD_TYPE=${make_build_type} …
Run Code Online (Sandbox Code Playgroud) 我的目标是学习如何从头开始编写自定义迭代器.我写了以下迭代器:
#include <iterator>
template<class D>
class SpanIterator final : public std::iterator<std::random_access_iterator_tag, D>
{
private:
D* _data;
public:
explicit SpanIterator(D* data) :
_data{ data }
{
}
SpanIterator(const SpanIterator& itertator) = default;
SpanIterator& operator=(const SpanIterator& iterator) = default;
SpanIterator& operator=(D* data)
{
_data = data;
return *this;
}
operator bool() const
{
return _data != nullptr;
}
bool operator==(const SpanIterator& itertator) const
{
return _data == itertator._data;
}
bool operator!=(const SpanIterator& itertator) const
{
return _data != itertator._data;
}
SpanIterator& operator+=(const …
Run Code Online (Sandbox Code Playgroud) 我们都知道C++是一种弱类型语言.它并不总是方便直观.例如,从double到int的隐式转换会导致精确丢失.关于变通方法的任何想法?
我需要获取 OSX 10.13 上鼠标的跟踪速度。我在互联网上找到了这段代码,但 NXOpenEventStatus 已被弃用(IOHIDGetAccelerationWithKey 也是如此),是否有其他方法?
#include <stdio.h>
#include <IOKit/IOKitLib.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/event_status_driver.h>
int main()
{
kern_return_t kr;
double trackpadAcceleration, mouseAcceleration;
NXEventHandle h = 0;
h = NXOpenEventStatus();
if (h == nil)
return -1;
kr = IOHIDGetAccelerationWithKey( h, CFSTR(kIOHIDMouseAccelerationType), &mouseAcceleration);
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×8
c++11 ×6
clang ×2
macos ×2
visual-c++ ×2
assembly ×1
c# ×1
casting ×1
clang-cl ×1
cmake ×1
cocoa ×1
haxe ×1
llvm-clang ×1
objective-c ×1
performance ×1
types ×1
x86 ×1