我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #包括 我正在开发一个小项目,并尝试将一些硬编码值用于内联汇编。为此,我使用模板。我创建了一个代码片段来显示我所看到的 #include <iostream> template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { size_t value = T; __asm { mov eax, [T] mov [value], eax } std::cout << value << std::endl; } }; int main() { auto o = new MyClass<999>(); o->doSomething(); return 0; } 事实证明,对于汇编代码,它试图使用数据段而不是“直接将数字粘贴到那里” ; 25 : { push ebp mov ebp, esp push ecx ; 26 : auto o = new MyClass<999>(); push 4 call ??2@YAPAXI@Z ; operator new add esp, 4 ; 14 : size_t value = T; mov DWORD PTR _value$2[ebp], 999 ; 000003e7H ; 26 : auto o = new MyClass<999>(); mov DWORD PTR [eax], 0 mov DWORD PTR [eax], 999 ; 000003e7H ; 15 : __asm ; 16 : { ; 17 : mov eax, [T] mov eax, DWORD PTR ds:0 ; 18 : mov [value], eax mov DWORD PTR _value$2[ebp], eax ; 19 : } ; 20 : std::cout << value << std::endl; 我正在使用 Visual Studio 2015。还有其他方法可以实现此目的吗? 啊,多么可爱又扭曲的问题啊! 我尝试使用 T 初始化 constexpr 变量。结果是相同的 - 从内存加载值。宏可用于将文字传递给内联汇编,但它们与模板不能很好地混合。 使用 T 在类中初始化枚举在理论上应该可行(https://msdn.microsoft.com/en-us/library/ydwz5zc6.aspx提到枚举可以在内联汇编中使用),但是在内联汇编使 Visual Studio 2015 编译器崩溃:-)。 似乎有效的是一个函数模板,它使用模板参数声明一个枚举,然后在内联程序集中使用该枚举。如果必须将其放在模板类中,则可以在类中实例化模板函数,如下所示: #include <iostream> template <size_t T> void dosomething() { enum { LOCALENUM = T }; size_t value = 0; __asm { mov eax, LOCALENUM mov[value], eax } std::cout << value << std::endl; } template <size_t T> struct MyClass { size_t myValue = T; void doSomething() { ::dosomething<T>(); } }; int main() { //dosomething<999>(); auto o = new MyClass<999>(); o->doSomething(); return 0; } 这会产生以下汇编代码: auto o = new MyClass<999>(); 001B1015 mov dword ptr [eax],0 001B101B mov dword ptr [eax],3E7h o->doSomething(); 001B1021 mov eax,3E7h <--- Victory! 001B1026 mov dword ptr [ebp-4],eax 001B1029 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (01B2048h)] 001B102F push offset std::endl<char,std::char_traits<char> > (01B1050h) 001B1034 push dword ptr [ebp-4] 001B1037 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (01B2044h)]
cout << order of call to functions it prints?
以下代码: myQueue.enqueue('a'); myQueue.enqueue('b'); 计算<< myQueue.dequeue() << myQueue.dequeue(); prints "ba" to the console while: myQueue.enqueue('a'); myQueue.enque...
C++ 将 std::chrono::utc_clock 格式化为毫秒
我使用以下行来获取毫秒精度的时间: std::stringstream s; std::chrono::time_point TimeTag = time_point_cast(std::
以下程序不能在 VS11 beta、gcc 4.5 或 clang 3.1 中构建 #包括 #包括 int main() { std::unique_ptr p; std::线程 th([](std::
我尝试在 std::string 中有选择地获取当地时间/UTC。 我尝试过的: (1) 获取 UTC 的 std::string 使用 std::format 可以正常工作: 自动 utc = std::chrono::system_clock::now(); std::字符串...
为什么构造 std::string(0) 不会发出编译器警告?
假设我有这段代码。 #包括 int main() { std::字符串(0); 返回0; } 写入 std::string(0) 会导致 std::basic_string::basic_string(const char*)...
gcc-12/13:仍然找不到 std::stacktrace
我有这个代码: #包括 #包括 int 嵌套函数(int c) { std::cout << std::stacktrace::current() << '\n'; return c + 1; } int func(int ...
我需要将 std::function 作为 void 指针传递以异步执行,因此我在堆上创建了一个 std::function 。删除函数体内的 std::function 对象是否安全?请看...
如何使用 std::move_iterator 从向量中删除元素?
这是一个 Josephus 排列问题,它是通过使用 std::move() 解决的,但现在我必须切换到使用 std::move_iterator (通过使用 std::make_move_iterator()) 但是,这不能编译:
我无法理解C2665错误(VS 2017 / 15.9.58)
已解决 我在 Visual Studio 2017 (15.9.58) 上遇到重载函数问题: 使用 GrayScalePixel = std::uint8_t; 结构体PgmImage { std::uint16_t 宽度; std::uint16_t 高度; ...
这段代码: 使用 std::thread::sleep; 使用 std::time; 使用 std::sync::atomic::{AtomicU32,排序}; 使用 tokio::time::Duration; 静态REQUEST_RECV_V2:AtomicU32 = AtomicU32::new(0); 异步 fn no_msg_p...
目前,我有以下代码: 布尔检查(初始化列表) 我想用 std::ranges::range 替换它。 布尔检查(std::ranges::range auto &) 问题:我怎样才能...
为什么将operator()作为std::function调用不起作用
考虑这个旨在收集字符串序列的小类: 班级问题_t期末 { 私人的: std::vector m_issues; 民众: constexpr void 运算符()(std::string&a...
“优雅地”我的意思是:“在终止之前调用本地/静态对象 dtor,而不生成 coredump”。 我试过: std::exit() (以 coredump 终止) std::_Exit() std::中止...
如何DROP开头为“`”的数据库,导致添加单反棍无法解决[重复]
如何删除带有反引号的 mysql NAMMIK(innodb_version 10.4.18)?它是由 CALL sys.create_synonym_db 无意添加的;请注意,添加单个背杆并不能解决问题,因为
如何删除以“`”开头的数据库,因为添加单个backstick无法解决[重复]
如何删除带有反引号的 mysql NAMMIK(innodb_version 10.4.18)?它是由 CALL sys.create_synonym_db 无意添加的;请注意,添加单个背杆并不能解决问题,因为
我有两个别名来使用智能指针管理玩具状态机的状态集合: 使用 States = std::tuple, std::shared_ptr>; 使用
所以我有两个排序向量,我想将它们合并为一个排序向量而不使用额外的向量。 由于存在这种情况,我无法使用 std::merge,所以我尝试了 std::inplace_...
我有一个 C++ 数组。 std::array arr { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 我想反转最后五个元素,最终得到 { 0, 1, 2, 3, 4, 9, 8, 7, 6, 5 }。我知道 std::array 给出...
我正在使用一个调用 std::locale:global 的库来保存和恢复 C++ 区域设置。 但是 std::locale::global 设置 C++ 语言环境设置和 C 语言环境设置,如这个漂亮的用户 gui 中所述...
这是代码: #包括 #包括 #包括 #包括 std::binary_semaphore sema{ 1 }; int main() { std::线程 th([] { ...
为什么 std::sleep_for(std::chrono::hours::max()) 在 Linux 上立即返回?
我正在运行一个提供服务的 C++ 程序,并注意到即使不提供任何请求,它也会占用 100% 的 CPU。我将问题缩小到一个 while 循环,该循环调用 std::sleep_...
std::remove 是否保留删除的元素,或者它们是否可以被覆盖?
int main() { std::vector v(10, false); v[0] = 真; v[1] = 真; auto end_it = 删除(v.begin(), v.end(), true); 对于 (int i = 0; i < v.size(); ++i) cout << ...
这里是否误报:警告C4172:返回局部变量或临时变量的地址?
在以下代码中: #包括 #包括 模板 类索引{ 民众: const std::string& 文本; const std::向量&...
错误:没有匹配的函数可用于调用 'std::tuple<std::vector<int, std::allocator<int> >&, int>::tuple()'
嘿,我通常使用 Javascript 和 dart,但我被要求为某些项目用 C++ 编写一些代码,所以我在编写代码时遇到了很多问题。我遇到过这个错误
std::enable_if_t typedef 替换不等效
我经常为类创建一个 this_type typedef 以缩短成员函数签名。 然而,我在使用 std::enable_if_t 时遇到了这个奇怪的情况。 #包括 #包括 #
为什么我可以使用模板函数作为 std::sort 的参数,但不能使用模板 lambda(使用成员函数 ptr 作为模板参数)[重复]
抱歉标题很长,正如我所说的,这是有效的: 结构体 S { int a{}, b{}; }; std::ostream & 运算符<<(std::ostream &o, const S &s) { return o << '{' << s.a << '...
可能很蠢,但与其被问到,不如后悔一辈子。 std::atomic::load 和 std::atomic::store 的标准模式是 像这样的东西 注意:假设在所有前...
为什么将迭代器 '(vector<int> a).begin()' 传递给参数 'vector<T>::iterator b' 时无法推断 'T' 的类型?
有以下代码: 模板 void test(const typename std::vector::iterator &i){ } int main(int argc, char **argv) { std::向量 a; 测试(a.
下面的代码会将数组中每种颜色的最大值转换为hashmap。也在 Rust 游乐场。 使用 std::collections::HashMap; 使用 std::cmp; fn 主() { 让数组= [ ...
我正在尝试设计一个像这样的简单函数: 无效绘制(回调回调) { 绘图绘图(“名称”); 回调(绘图); std::cout << drawing.name() << std::e...
为什么 std::apply 使用函数模板会失败,但使用具有显式模板参数列表的 lambda 表达式却不会失败? [重复]
在查看 cpprefrence 中的 std::apply 引用时,我们可以看到函数模板不能作为 std::apply 的可调用对象传递。让我们考虑以下函数模板: 模板<
对于 std::strings,如何将所有出现的子字符串替换为另一个字符串? std::string s (“一个你好,两个你好。”); s = s.replace("你好", "世界"); //
使用命名空间std; #定义模1e9+7 int main(){ 计算< using namespace std; #define mod 1e9+7 int main(){ cout<<mod; cout<<endl<<fixed<<mod; } 输出: 1e+009 1000000007.000000 我认为在这种情况下,mod 是一个浮点数,因此第一个给出 1e+009 作为输出,这可能是由于浮点精度所致。但是使用fixed后,为什么输出不是1000000000.000000。 (通过#include 包含所有必需的头文件) 1e9 + 7 这个数字可以在 double 中精确表示,这里没有精度损失。 但是,当您使用std::cout << mod打印它时,它会使用默认精度打印,即6位十进制数字。因此,不打印 7。 您可以使用 std::cout 操纵器调整 std::setprecision 的精度: #include <iostream> #include <iomanip> int main() { std::cout << std::setprecision(10) << mod << '\n'; } 将打印 1000000007
我将一个指向向量的指针作为函数中的输出参数,我不知道这是否是最佳实践: 状态接口::method(const std::vector** outVec); 我正在写...
我正在尝试构建一个“静态”数据数组,并继续与编译时/运行时失败作斗争。这是我正在尝试的精简版本: const std = @import("std"); 变种
给定一个索引列表,如何从 std::vector 中删除这些元素?
我先描述一下更高层次的目标。我有一个布尔值矩阵(我使用 std::vector> 作为表示)。 我想删除整行所在的所有行...
filesystem::copy 返回无效参数,但参数是现有的 fs::path 变量
我正在使用 std::filesystem (fs) 库处理项目中的文件。我存储为 fs::path 变量的所有路径。我的代码是: int main(){ std::filesystem::path root_dir = "/home/xyz/study/
我正在尝试解决这个leetcode问题,我应该对向量执行k个位置的右旋转。由于 std::rotate 进行左旋转,我尝试使用反向迭代器来适应...
首先,我想说我已经对这个主题进行了研究,但没有任何相关...... (使用 clang 在 Mac OS X 上创建 std::thread 时出错:“尝试使用已删除的函数”...
确保 std::vector 始终对齐以实现最佳 SIMD 执行的方法?
我想要 X 数量的相同大小的 std::vectors,我可以在 for 循环中一起处理它们,该循环以线性方式从开始到结束。例如: 对于 (int i = 0; i <
正在使用std::tuple来实现运算符<, = etc. efficient and correct?
我发现我最近经常使用 std::tuple 来实现排序、相等运算符,如下例所示。这是一个正确且有效的方法吗?当多个变量时它特别有用...
了解 std::function 的开销并捕获同步 lambda
考虑以下简单示例: #包括 #包括 #包括 #包括 #包括 #包括...
我想使用我的自定义分配器为 std 中的容器定义类型别名,例如 输入 MyBox = Box; 然而我被告知 错误[E0229]:关联的类型绑定不是
在处理必须与 C 代码互操作的代码时,我经常遇到这个问题,其中有一个 std::string ,您需要将其内容复制到普通的 char 缓冲区,如下所示: 结构体T {...
我有一个对象特征,可以从某个索引提供字节。这些可能是文件、正在跟踪的进程、其他字节提供程序上的缓存等: 使用 std::结果::结果; 使用 std::io::Error ;
如何解决 Substrate `std' 中的重复 lang 项('myexternalcrate' 所依赖的):'panic_impl' 与 sr-io 冲突
我在 Substrate 1.0 运行时模块(基于节点模板)中使用 extern crate,它给出的编译错误为 板条箱“std”中存在重复的 lang 项目(“myexternalcrate”依赖于“myexternalcrate”):“pani...
此 C++ 代码片段以毫秒和小时为单位打印持续时间: #包括 #包括 #包括 使用命名空间 std; 使用命名空间 std::chrono; int main() { 自动...
有没有办法找到我的代码中所有出现的 std::vector<bool> ?
我管理一个包含很多模板类的大型复杂代码。 我想禁止在代码中使用 std::vector (因为这是编译问题的一个反复出现且痛苦的原因......
从初始值设定项列表转换为“A”将使用显式构造函数“A::A(int)”
我正在尝试将旧的 C++03 代码库迁移到 C++11。但我无法理解 gcc 在以下情况下警告我的内容: % g++ -std=c++03 t.cxx % g++ -std=c++11 t.cxx t.cxx:功能中...