小编Mge*_*etz的帖子

什么应该进入.h文件?

将代码分成多个文件时,究竟应该将哪些内容放入.h文件以及应该放入.cpp文件中的内容?

c++ header-files

90
推荐指数
5
解决办法
8万
查看次数

将一个数组分配给另一个数组c ++

您好我是c ​​++的初学者,有人可以向我解释一下

char a[]="Hello";

char b[]=a; // is not legal 
Run Code Online (Sandbox Code Playgroud)

然而,

char a[]="Hello";

char* b=a; // is legal 
Run Code Online (Sandbox Code Playgroud)

如果无法将数组复制或分配给另一个数组,为什么它可以作为参数传递,其中传递的值的副本始终在方法中进行

void copy(char[] a){....}

char[] a="Hello";

copy(a);
Run Code Online (Sandbox Code Playgroud)

c++ arrays

12
推荐指数
2
解决办法
6万
查看次数

Windows上的std :: conditional_variable :: wait_for,std :: thread :: sleep_for受调整时钟的影响

好.我有Win10 x64和这个非常简单的代码:

int main() {
    std::conditional_variable cv;
    std::mutex m;
    std::unique_lock<std::mutex> lock(m);
    while(1) {
        cv.wait_for(lock, 1000ms, [](){return false;});
        std::cout << "!" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

是.代码就像我期望的那样工作; 表明 '!' 每一秒.但如果我改变当地时间(例如减去1小时/分钟),它就永远存在.如果我cv.wait_for(...)用WinAPI 替换Sleep(1000)它工作正常.WinAPI也SleepConditionVariableCS可以正常工作.

我试过这个:

cv.wait_until(lock, std::chrono::steady_clock::now() + 1000ms, [](){return false;});
Run Code Online (Sandbox Code Playgroud)

它给了我相同的结果.

BTW:调用的行为一样std::this_thread::sleep_for,std::this_thread::sleep_until都是一样的.

所以问题是:是否可以使用std::condition_variable预期的行为?或者我只需要用我自己的CONDITION_VARIABLE包装器替换它?

c++ winapi c++11 visual-studio-2015 visual-studio-2017

11
推荐指数
1
解决办法
1274
查看次数

如何在64位Windows程序集中使用"GS:"(例如,移植TLS代码)

用户空间程序如何在64位Windows(当前为XP-64)下配置"GS:"?
(通过configure,将GS:0设置为任意64位线性地址).

我正在尝试将"JIT"环境移植到最初为Win32开发的X86-64.

一个不幸的设计方面是相同的代码需要在多个用户空间线程(例如,"光纤")上运行.代码的Win32版本使用GS选择器,并生成正确的前缀来访问本地数据 - "mov eax,GS:[offset]"指向当前任务的正确数据.来自Win32版本的代码会将值加载到GS中,只要它有一个可以工作的值.

到目前为止,我已经能够发现64位窗口不支持LDT,因此Win32下使用的方法不起作用.但是,X86-64指令集包括"SWAPGS",以及在不使用传统分段的情况下加载GS的方法 - 但这仅适用于内核空间.

根据X64手册,即使Win64允许访问描述符 - 它没有 - 但是没有办法设置段基的高32位.设置这些的唯一方法是通过GS_BASE_MSR(和相应的FS_BASE_MSR - 在64位模式下忽略其他段基).WRMSR指令是Ring0,所以我不能直接使用它.

我希望有一个Zw*函数,允许我在用户空间或Windows API的其他一些黑暗角落中更改"GS:".我相信Windows仍然使用FS:对于自己的TLS,所以必须有一些机制?


此示例代码说明了该问题.我提前为使用字节代码道歉 - VS不会为64位编译进行内联汇编,我试图将此作为一个文件保留用于说明目的.

程序在XP-32上显示"PASS",在XP-x64上不显示.


#include <windows.h>
#include <string.h>
#include <stdio.h>


unsigned char GetDS32[] = 
            {0x8C,0xD8,     // mov eax, ds
             0xC3};         // ret

unsigned char SetGS32[] =
            {0x8E,0x6C,0x24,0x04,   // mov gs, ss:[sp+4] 
             0xC3 };                // ret

unsigned char UseGS32[] = 
           { 0x8B,0x44,0x24,0x04,   // mov eax, ss:[sp+4] 
             0x65,0x8B,0x00,        // mov eax, gs:[eax] 
             0xc3 };                // ret

unsigned char SetGS64[] =
            {0x8E,0xe9,             // mov …
Run Code Online (Sandbox Code Playgroud)

assembly winapi win64 x86-64

10
推荐指数
1
解决办法
6304
查看次数

ADT和类之间的区别?

ADT is the set of operations. ADT's are mathematical abstractions.
Run Code Online (Sandbox Code Playgroud)

这是否意味着ADT与班级相同或者我是否混淆在一起?

c abstract-data-type data-structures

8
推荐指数
2
解决办法
8074
查看次数

有什么阻止std :: optional :: value_or()有条件地noexcept吗?

这是value_or()C++ 17标准的定义:

template <class U> constexpr T value_or(U&& v) const&;

效果:相当于:

return bool(*this) ? **this : static_cast<T>(std::forward<U>(v));

备注:如果is_copy_constructible_v<T> && is_convertible_v<U&&, T>false,该程序是不正确的.

(右值超载类似)

效果value_or被描述为等同于return bool(*this) ? **this : static_cast<T>(std::forward<U>(v));

operator boolnoexcept.operator*不是 noexcept(即使它没有抛出,可能是因为如果在可选项不包含值时使用UB,它仍然可以失败).但是,我们保证永远不会尝试返回包含的值,除非我们有一个.

所以不能value_or被宣布noexcept给予is_nothrow_copy_constructible<T> && noexcept(static_cast<T>(std::forward<U>(v)))

c++ language-lawyer noexcept c++17 stdoptional

8
推荐指数
1
解决办法
221
查看次数

在Azure角色中使用SmtpClient时,"不支持请求的功能"异常

我在Azure Web或Worker角色中使用SmtpClient时遇到异常.

我创建了一个控制台应用程序,通过RDP在角色VM上手动运行以重现:

using System;
using System.Net;
using System.Net.Mail;
using System.Text;

namespace ConsoleApplication1
{
   class Program
   {
      static void Main()
      {
         var mailClient = new SmtpClient("mail.redacted.com", 587);
         mailClient.EnableSsl = true;
         mailClient.DeliveryFormat = SmtpDeliveryFormat.International;
         mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;

         mailClient.UseDefaultCredentials = false;//SET THIS FIRST OR IT WIPES OUT CREDENTIALS
         NetworkCredential netCreds = new NetworkCredential("mail@redacted.com", "12345 same combination on my luggage");
         mailClient.Credentials = netCreds;

         MailMessage message = new MailMessage();
         message.SubjectEncoding = Encoding.UTF8;
         message.BodyEncoding = Encoding.UTF8;
         message.IsBodyHtml = false;

         message.From = new MailAddress("mike@redacted.com");
         message.To.Add(new MailAddress("mike@redacted.com")); …
Run Code Online (Sandbox Code Playgroud)

.net c# azure smtpclient

7
推荐指数
1
解决办法
4530
查看次数

在自定义样式中使用尺寸

在Android中,我有以下内容:

dimens.xml

<dimen name="buttonMarginRL">10dp</dimen>
<dimen name="buttonMarginTB">5dp</dimen>
Run Code Online (Sandbox Code Playgroud)

style.xml

<style name="my_button" parent="@android:style/Widget.Button">
    <item name="android:textSize">16sp</item>

    <item name="android:layout_marginLeft">@dimen/buttonMarginRL</item>
    <item name="android:layout_marginRight">@dimen/buttonMarginRL</item>
    <item name="android:layout_marginTop">@dimen/buttonMarginTB</item>
    <item name="android:layout_marginBottom">@dimen/buttonMarginTB</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我将它添加到按钮视图中:

someFragment.xml

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/button"
    style="@style/my_button" />
Run Code Online (Sandbox Code Playgroud)

但利润率没有得到应用.将10dp5dp直接放入my_button样式时,它按预期工作.在Android中是否可以使用dimens.xml中指定的值在自定义样式中使用,或者维度值是否只能直接应用于视图?

android android-styles

7
推荐指数
1
解决办法
2015
查看次数

WKWebView无法在window.location上导航

在中WKWebView,我加载了一个window.location = newURL内部带有JS 的网页。永远不会到达newURL。decidePolicyForNavigationAction甚至从未调用委托(而window.location在JS中正确调用了更改)

我不能更改JS部分(根本不能更改我的网站),只能更改WKWebView侧面。关于如何使我的视图导航到新URL的任何想法?

objective-c wkwebview

6
推荐指数
0
解决办法
675
查看次数

缺少 Apple Clang 13 C++20 模块支持

根据官方文档,Clang 13 通过使用-fmodules命令行参数支持 C++20 模块。

我什至无法在基于 Intel 或 M1 的 Mac 上使用 Clang 13 (macOS Monterey) 编译基本模块。

假设文件的文本内容如下module.cpp

export module a;

export int f(int a, int b) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

运行以下命令:

$ clang++ --version
Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: x86_64-apple-darwin21.1.0

$ clang++ -std=c++20 -stdlib=libc++ -fmodules -fbuiltin-module-map -c module.cpp 
module.cpp:1:8: error: expected template
export module a;
       ^
module.cpp:1:8: error: unknown type name 'module'
module.cpp:3:8: error: expected template
export int f(int a, …
Run Code Online (Sandbox Code Playgroud)

clang++ c++20 c++-modules apple-m1 macos-monterey

6
推荐指数
1
解决办法
8038
查看次数