在 Android 开发页面的 Dagger 部分,
NetworkModule.classJava 代码的编写方式[NetworkModule::class]与 Kotlin 代码相同。
我认为NetworkModule.class在 Java 中应该NetworkModule::class.java在 Kotlin 中,不是吗?
为什么要使用方括号([])?我认为它与 相同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) 初学者问题。
在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++ 的一些基本概念,请告诉我。
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,而不是“成员初始值设定项列表”。
这可能是一个初学者语法问题,但我在 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) 却不行?
这是一个新手问题,所以请理解。
我尝试了解LPCTSTR,LPCWSTR等等,我以为我理解了这些,并且我了解了T它根据UNICODE设置而变化的含义。
但是,我在文档的“预定义类型”部分中找到了PCXSTR、PCYSTR等。CStringTCStringT
这里有几个问题。
PCXSTR、PCYSTR、XCHAR、等是什么YCHAR,它们与 、 等有什么LPCTSTR关系TCHAR?
上述 MSDN 部分中的“相同/相反字符类型”是什么意思?
CSimpleStringT::operator PCXSTR()源代码中有( atlsimpstr.h)。当我编写一些类似 的代码时,它似乎与(Visual Studio“转到定义”将我带到,而不是)myCString.operator LPCWSTR();相同。VS甚至只建议,不建议。那么,(与我的 Unicode 设置中的相同)与 相同吗?这里发生了什么?myCString.operator PCXSTR();operator PCXSTR()operator LPCWSTR()operator LPCWSTRoperator PCXSTRLPCWSTRLPCTSTRPCXSTR
在Android Studio中,我们可以使用“ctrl+shift+f”(在Windows中)在项目中搜索,
但这仅显示我们自己项目内的搜索结果。
我们怎样才能在整个Flutter源码中搜索到任意一个类或者方法呢?
(比如我想搜索BackdropFilterFlutter源码中的类,该怎么办?)
我们可以在 IDE 中使用“转到定义”,但我只想搜索。
只是一个初学者的问题。
在cppreference.com的代码中,在 using 行上有一条注释说“确保它是副作用”std::accumulate。
作者这样说的意图是什么?与 相关吗volatile int sink?(也许它的意思是“确保sink编译器没有优化”?)
为什么?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) 我测试了以下代码,但 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) 我想我不明白 的初始化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{}?
编辑)最初我没有使用正确的术语,我的错。当我说“未编译”时,我想说的是“未运行(编译后)”。