小编sta*_*iet的帖子

Java 中的“ClassName.class”与 Kotlin 中的“[ClassName::class]”相同吗?

在 Android 开发页面的 Dagger 部分,

NetworkModule.classJava 代码的编写方式[NetworkModule::class]与 Kotlin 代码相同。

  1. 我认为NetworkModule.class在 Java 中应该NetworkModule::class.java在 Kotlin 中,不是吗?

  2. 为什么要使用方括号([])?我认为它与 相同get,但我们为什么需要它?

我在读这个:https : //developer.android.com/training/dependency-injection/dagger-android#java

在“匕首模块”部分,

爪哇代码:

@Component(modules = NetworkModule.class)
public interface ApplicationComponent {
    ...
}
Run Code Online (Sandbox Code Playgroud)

用 Kotlin 编写的相同代码:

@Component(modules = [NetworkModule::class])
interface ApplicationComponent {
    ...
}
Run Code Online (Sandbox Code Playgroud)

java android kotlin dagger

5
推荐指数
1
解决办法
86
查看次数

CRect 和 CRect* 如何同时作为 GetClientRect 的输入参数?

初学者问题。

在Win32API中, 的第二个参数::GetClientRect是LPRECT,但它同时接收CRect和CRect*。

我试图看看它LPRECT是如何定义的,但它似乎只是一个普通的结构指针:

typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
Run Code Online (Sandbox Code Playgroud)

并CRect继承tagRECT:

class CRect :public tagRECT {...}
Run Code Online (Sandbox Code Playgroud)

使用MFC,CWnd::GetClientRect工作方式相同:

CRect rect;
GetClientRect(&rect); // works
GetClientRect(rect);  // works too.
Run Code Online (Sandbox Code Playgroud)

这怎么可能?如果我缺少 C++ 的一些基本概念,请告诉我。

c++ winapi mfc

3
推荐指数
1
解决办法
197
查看次数

使用 MFC 对象初始化 std::map 无法编译

MFC初学者看这里。

我尝试std::map像这样初始化:(在 CView 的标题中)

// myprogramView.h
std::map<int, CStatic> myMap = {{10,{}}, {11,{}}};
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨“没有构造函数的实例......与参数列表匹配”。

(编辑以供将来参考)以上消息是来自 IntelliSense 的错误。编译器(MSVC)说: C2664 'std::map<int,CStatic,std::less,std::allocator<std::pair<const _Kty,_Ty>>>::map(std::initializer_list<std ::pair<const _Kty,_Ty>>)': 无法将参数 1 从 '初始化列表' 转换为 'std::initializer_list<std::pair<const _Kty,_Ty>>'

但是,我们可以进行以下类型的初始化:

std::map<int, std::string> myMap2 = { {10,{}}, {11,{}} };
std::map<int, std::map<std::string, int>> myMap3 = { {10,{}}, {11,{}} };
Run Code Online (Sandbox Code Playgroud)

为什么第一个示例无法编译,如何使用包含 MFC 对象的映射?

我试图在.Create()运行时或在OnCreate.

我也尝试过CMap,但似乎出现了同样的问题。


j6t 的回答解决了问题。只是想澄清一下,答案是在谈论std::initializer_list,而不是“成员初始值设定项列表”。

c++ mfc

3
推荐指数
1
解决办法
171
查看次数

带括号 &amp;(A::m) 的非静态成员函数地址不起作用?

这可能是一个初学者语法问题,但我在 SO 中找不到。

#include<iostream>
class A
{
  public:
     static void sm(){}
     void m(){}
};
int main()
{
    void (*fp1)() = &A::sm;     // 1) fine.
    void (*fp2)() = &(A::sm);   // 2) fine.


    void (A::*fp3)() = &A::m;   // 3) fine.
    void (A::*fp4)() = &(A::m); // 4) error: invalid use of non-static member function 'void A::m()'
}
Run Code Online (Sandbox Code Playgroud)

C++ 运算符优先级表示范围解析运算符 ( ::) 具有最高优先级。

那么为什么 1) 和 2) 可以正常工作,但 4) 却不行?

c++

3
推荐指数
1
解决办法
92
查看次数

PCXSTR是什么,它和LPCTSTR一样吗?

这是一个新手问题,所以请理解。

我尝试了解LPCTSTR,LPCWSTR等等,我以为我理解了这些,并且我了解了T它根据UNICODE设置而变化的含义。

但是,我在文档的“预定义类型”部分中找到了PCXSTR、PCYSTR等。CStringTCStringT

这里有几个问题。

  1. PCXSTR、PCYSTR、XCHAR、等是什么YCHAR,它们与 、 等有什么LPCTSTR关系TCHAR?

  2. 上述 MSDN 部分中的“相同/相反字符类型”是什么意思?

  3. CSimpleStringT::operator PCXSTR()源代码中有( atlsimpstr.h)。当我编写一些类似 的代码时,它似乎与(Visual Studio“转到定义”将我带到,而不是)myCString.operator LPCWSTR();相同。VS甚至只建议,不建议。那么,(与我的 Unicode 设置中的相同)与 相同吗?这里发生了什么?myCString.operator PCXSTR();operator PCXSTR()operator LPCWSTR()operator LPCWSTRoperator PCXSTRLPCWSTRLPCTSTRPCXSTR

c++ string winapi mfc

3
推荐指数
1
解决办法
256
查看次数

如何在android studio或者vscode中搜索整个Flutter源码

在Android Studio中,我们可以使用“ctrl+shift+f”(在Windows中)在项目中搜索,

但这仅显示我们自己项目内的搜索结果。

我们怎样才能在整个Flutter源码中搜索到任意一个类或者方法呢?

(比如我想搜索BackdropFilterFlutter源码中的类,该怎么办?)

我们可以在 IDE 中使用“转到定义”,但我只想搜索。

dart android-studio visual-studio-code flutter

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

“挥发性”和“副作用”有关系吗?

只是一个初学者的问题。

在cppreference.com的代码中,在 using 行上有一条注释说“确保它是副作用”std::accumulate。

  1. 作者这样说的意图是什么?与 相关吗volatile int sink?(也许它的意思是“确保sink编译器没有优化”?)

  2. 为什么?volatile​ sink我认为几乎每个编译器都可能知道std::accumulate会改变 的值sink。

我以为我知道volatile“副作用”是什么意思,但也许我错过了一些要点!

#include <iostream>
#include <iomanip>
#include <vector>
#include <numeric>
#include <chrono>
 
volatile int sink;
int main()
{
    std::cout << std::fixed << std::setprecision(9) << std::left;
    for (auto size = 1ull; size < 1000'000'000ull; size *= 100) {
        // record start time
        auto start = std::chrono::system_clock::now();
        // do some work
        std::vector<int> v(size, 42);

        // …
Run Code Online (Sandbox Code Playgroud)

c++ side-effects volatile

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

std::tuple 包含引用 - 这是 UB 还是 MSVC bug?

我测试了以下代码,但 gcc/clang 和 MSVC 的结果似乎不同。

这是未定义的行为还是 MSVC 错误?根据诸如this和this之类的答案,我认为为 C++ std 容器分配一个值是一个深层复制。所以我认为这是一个法律代码。

如果我错过了 C++ 的一些基本概念,请帮助我。

#include <iostream>
#include <vector>
#include <map>
#include <tuple> 
struct S {
    std::vector<int> v; 
    std::tuple<std::vector<int>&> tup{v};
}; 
int main() {
    std::map<int, std::map<int, S>> m_n_s; 
    for (int j = 0; j < 1; ++j) {
        std::map<int, S> n_s; 
        for (int i = 0; i < 1; ++i) {
            std::vector<int> v2{33,44};
            S s;
            s.v = v2; 
            n_s[8] = s; 
        }
        m_n_s[9] = n_s; 
    }
    S …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

使用 `{{}}` 初始化 std::vector 是否会导致未定义的行为?

我想我不明白 的初始化std::vector。

下面的代码似乎可以使用 gcc、clang 和 MSVC 编译并正常运行。

#include <iostream>
#include <vector>
int main() {
    std::vector<int> v{{}};

    v[10] = 11; // if initialize with v{}, segmentation fault.

    std::cout << "v[10]:" << v[10] << std::endl; // prints v[10]:11
    
    for (auto e : v) // prints only v[x]:0
        std::cout << "v[x]:" << e << std::endl;    
}

// result:
// v[10]:11
// v[x]:0
Run Code Online (Sandbox Code Playgroud)

访问元素是否会v[10]导致未定义的行为?

为什么上面的代码用v{{}}可以正常运行,但用 则不行v{}?

编辑)最初我没有使用正确的术语,我的错。当我说“未编译”时,我想说的是“未运行(编译后)”。

c++ stdvector

0
推荐指数
1
解决办法
92
查看次数