V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 28 页 / 共 173 页
回复总数  3450
1 ... 24  25  26  27  28  29  30  31  32  33 ... 173  
2022-07-17 14:03:30 +08:00
回复了 estk 创建的主题 iOS 如何更改资料让美区 App Store 免税?
你的账单地址必须在免税区域。

中国的增值税(包括以前的营业税)是向卖方征收的,美国的营业税是向买方征收的(卖方有代收义务),自然体现不同(但归根结底还是买方承担)。

http://www.chinatax.gov.cn/chinatax/n810341/n810765/n812156/201110/c1186045/content.html
2022-07-17 13:16:05 +08:00
回复了 churchill 创建的主题 问与答 请教: win11 家庭版只能单语言吗?
单语言的限制只存在于 Windows 11 Home Single Language 版本,没有“Single Language”的 Home 可以多语言。

https://support.microsoft.com/en-us/windows/manage-the-input-and-display-language-settings-in-windows-12a10cb4-8626-9b77-0ccb-5013e0c7c7a2#WindowsVersion=Windows_11
Windows 自带的触控键盘恰好就是楼主一开始说的版本,另一个方法是使用 Windows 的粘滞键。这两个功能里,一切修饰键都是按一次作用于下一个非修饰键,连按两次锁定修饰键(按第三次解锁)。

说实话我一开始以为 #2 是嘲讽🤣
>需要为贡献者支付报酬吗?

这完全偏离了 GPL 的重点。GPL 的重点在于软件是否自由,而不是是否免费。

GPL 是版权持有者给其他人的授权,版权持有者并不丧失本来的任意权利,包括停止开源等。通常情况下,版权持有者是作者,每次修改都是创作衍生作品,因此没有特殊安排时,所有曾经贡献代码的人是共同的版权持有者(即使某个人贡献的代码已经被全部修改或删除过,也是),最初的作者并单独享有版权,而是对他创作的部分享有版权,对于其他部分,最初的作者只不过是得到了其他版权持有者的授权而已。Linux 内核就是这种模式。

在这种情况下,最新的版本(无论是否继续衍生)闭源发布,显然是违反 GPL 的行为,任何其他版权持有者皆可追求他们的权利。

一种常见的做法是要求所有作者都把他们的版权转移给项目负责人或机构(例如 FSF 就是这样操作的,但他们的主要目的是允许 FSF 集中采取行动保护 GPL 所赋予的自由),这样项目负责人或机构永远是惟一的版权持有者,自然可以对它做任何事情,包括闭源。
一个简单的思路是令相机保存 JPEG 。
2022-07-02 09:20:03 +08:00
回复了 Contextualist 创建的主题 C++ parameter pack 仅作为部分参数的问题
@dangyuluo #4 我在 #5 的回复里误解了你的意思,实现 invoke_function 只是为了复现楼主一开始想要实现的版本。
2022-07-02 09:14:44 +08:00
回复了 Contextualist 创建的主题 C++ parameter pack 仅作为部分参数的问题
@dangyuluo 因为可调用的东西不一定是 std::function ,还可以是 lambda 表达式、函数之类的。从 lambda 表达式、函数建立 std::function 有额外的内存分配,对性能不好。此外你也看到了 invoke_function 不能接受函数的名字,必须手工构造一个 std::function 。

更好的思路是检查这个东西是否可以赋值给 int ,用

std::is_same_v<
std::declval<int &>() = f(std::forward<TArgs>(args)..., std::declval<bool>()),
int &
>

这样也可以接受返回 const int &、int &、short 等的可调用的东西。
2022-07-02 08:03:08 +08:00
回复了 Contextualist 创建的主题 C++ parameter pack 仅作为部分参数的问题
你可以用 SFINAE 的思路

#include<utility>
#include<functional>

template <typename TCallable, typename ...TArgs>
auto invoke_functor(TCallable &&f, TArgs&& ...args) -> std::enable_if_t<std::is_same_v<decltype(f(std::forward<TArgs>(args)..., std::declval<bool>())), int>, int>
{
int r0 = f(std::forward<TArgs>(args)..., false);
int r1 = f(std::forward<TArgs>(args)..., true);
return r0 + r1;
}

template <typename TCallable, typename ...TArgs>
auto invoke_function(const TCallable &f, TArgs&& ...args) -> std::enable_if_t<std::is_same_v<TCallable, std::function<int(TArgs..., bool)>>, int>
{
int r0 = f(std::forward<TArgs>(args)..., false);
int r1 = f(std::forward<TArgs>(args)..., true);
return r0 + r1;
}

int g(int a, int b, bool c)
{
return c ? a + b : a - b;
}

#include<iostream>

int main()
{
std::cout << invoke_functor(g, 2, 3) << std::endl;
std::cout << invoke_function(std::function<int(int, int, bool)>(g), 2, 3) << std::endl;
// Does not work.
// std::cout << invoke_function(g, 2, 3) << std::endl;
}
2022-07-01 11:14:30 +08:00
回复了 wyfyw 创建的主题 Windows 任务栏图标为啥在 IE 这里,把我逗乐了
@wyfyw #4 任务栏固定应用是快速启动工具栏的进化替代功能,自然是和之前一脉相承的。另外这里只保存快捷方式,还有一些数据存在注册表里。

@DOLLOR #6 bingo 我记得这个应该是某种 COM/OLE 的魔法。
2022-07-01 06:04:51 +08:00
回复了 kinglisky 创建的主题 分享发现 讲讲存档文件的包装设计
@thedrwu #2 IStorage 和 IStream 的噩梦,其实很多人天天都在用,例如 doc/ppt/xls/one 都是。
2022-06-30 15:58:18 +08:00
回复了 fpure 创建的主题 程序员 这算不算是静态类型系统的缺憾
>我的问题是有没有可能制造一种类型系统在实际类型匹配的情况下自动地做这个类型断言

不能,因为判定“实际”类型是否匹配是不可计算问题(确切来说,否认“实际”类型匹配是不可识别问题)。如果只考虑有限定义域(因为实际的电脑是有限大小的内存之类的),确认“实际”类型匹配处于多项式层级的第二层并且是 Sigma_2 完备问题。
2022-06-29 00:47:54 +08:00
回复了 MXXXXXS 创建的主题 分享创造 组内技术分享, 准备了一篇正则的介绍文章
>多组模式之一
>使用()来表示一组模式
>
>/[(a-c)(e-g)]/
>匹配
>
>"a", "b", "c"
>"e", "f", "g"

这似乎是误解,在 [] 里面 () 没有特别的含义,/[(a-c)(e-g)]/ 恰好匹配 abcefg() 这 8 个字符里的任意一个,等同于 /[abcefg)(]/。

>扩展阅读
>正则表达式的定义

这里你应该让读者注意实用中的正则表达式和计算理论意义下的正则表达式是不同的,实用意义的正则表达式(例如 JavaScript )的可以描述 non-regular language ,例如 /[01]*\1/ 所匹配的串的集合就不是 regular ,也不是 context-free 。再比如,零宽断言(包括 \b 等)也不能直接用计算理论意义下的正则表达式表达。

>正则表达式 R 是一种 language, P64

这是误解,正则表达式描述了一个 regular language ,但本身不是一个 language ,给定字母表的所有正则表达式的集合是另一个 language ,且后面这个 language 不是 regular 。

>JS 正则表达按照定义来看, 1-6 条可以分别对应
>2. /./对应任意字符
>3. //对应空

这是误解,2 (\varepsilon) 对应的是 //,它匹配长度为 0 的字符串,3 (\varnothing) 对应的是 /[]/,它不匹配任何字符串。

>正则表达式的局限性
>正则表达式只能处理有限的 context-free language
>像嵌套匹配的括号就没法用一个正则去描述
>是否是 context-free language 可以用 Pumping lemma 去判断

什么是“有限的 context-free language”?有限 language 都是 regular 。此外,pumping lemma 不能用来证明一个语言是 regular (可以用来证明一个语言不是 regular )。
2022-06-24 09:10:04 +08:00
回复了 oyp 创建的主题 程序员 问下大家,这种情况会不会扣钱?
肯定是不能的,但如果 PayPal 通过了交易,你可能会被催收
2022-06-21 23:35:23 +08:00
回复了 Mateverse 创建的主题 分享发现 今天(6 月 15 日)微软将会正式关闭 Internet Explorer
@yin1999 #11 可是 Windows PowerShell “自带”的 curl 是 Invoke-WebRequest ,默认也是要用 IE 的(除非用 -UseBasicParsing 取消)。
2022-06-19 12:55:52 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #32 我觉得您开始混淆应然和实然的问题了,从 #18 以来的问题并不考虑 argc[argv-1] 在最近常见的电脑的常见操作系统的常见编译器上是否对应 argv[argc-1]。

> argc[argv-1] = *((argc) + *((argv) - (1)))

这个想法也是错误的,argc[argv-1] 等价于 *(argc + (argv - 1)),改成 *(argc + *(argv - 1)) 是完全不同的意思,后者等价于 argc[argv[-1]],很明显也是不可移植代码。

认为指针的运算等于“地址数值”的运算也是错误的,更不能认为 p - 1 + 1 等同于 p ,最简单的例子:

int a[1] = {};
int *p = a - 1 + 1;

这段代码里 p 的初始化表达式蕴含着未定义行为,因为 a - 1 是不存在的概念。改成下面这样就没问题了:

int a[1] = {};
int *p1 = a + 1 - 1;
int *p2 = a - (-1) + (-1);
int *p3 = (int *)((uintptr_t)a - sizeof(int) + sizeof(int));

前两个版本的运算从来没有离开 a 的元素或元素之后的位置,第三个版本里,无符号数的加减运算无溢出,并且 uintptr_t 和指针之间的转换保证数值上的返程关系。
2022-06-19 11:09:35 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #27 您的翻译是错误的,但您的错误不止于此。

>如果其中**一个**没有越界,则结果**不**应该溢出

If BOTH the pointer operand AND the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

这句话的意思是:如果指针运算数和结果都指向同一个数组对象里的元素或该数组对象最后一个元素之后的位置,求它的值无溢出;否则,行为无定义。

假设 (P)+N 或 N+(P) 或 (P)-N 里的 P 指向数组里的下标是 i 的元素(如果是最后一个元素之后的位置,则令 i=M 为数组里的长度),令 i+N 或 i-N 为 j (取决于运算),这个定义要求 0 <= i <= M 且 0 <= j <= M ,否则行为未定义。

以上是英语和汉语的问题。下面是数学问题

> P 是 argv ,N 是-1 ,先求得 argv-1 的指针,该指针没有越过 argv 的最后一个项,因此值合法且指向数组最后一项

#18 已经说明 argv 可以指向某数组的第一个元素(即下标是 0 的元素),此时 argv-1 是“第一个元素之前的位置”(这个概念只存在于你我的想象中,不存在于 C 语言里),您怎么会认为 argv-1 是该数组的最后一个元素呢?
2022-06-19 01:55:14 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #20 #21 我帮你节选了你需要关注的部分:

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

现在你能理解 #18 的意思了吗?
2022-06-18 14:14:32 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
argv[argc-1] 是正确的,这不必多说。

argc[argv-1] 是语法正确的,楼上已经解释过了。然而这段代码是错误的(不可移植),见 C89 2.1.2.2 和 3.3.6 。

2.1.2.2 规定了 int main(int argc, char *argv[]) 的实参含义,满足该要求的实现里,argv 可以是一个长度为 (argc + 1) 的数组,此时依 3.3.6 对指针加减一个整数定义,(argv - 1) 是 undefined behavior ,因为它不能指向 argv 数组的任何一个元素,也不能指向 argv 数组最后一个元素之后的位置。该 undefined behavior 不要求算出的指针被解引用。

注意 argc[argv-1] 等同于 *(argc + (argv - 1)),因此是错误的。但 *(argc + argv - 1) 就不是错误的了(除非 argc 等于 0 )。
2022-06-15 12:52:32 +08:00
回复了 James369 创建的主题 程序员 看到另外一种“图灵完备”的解释
单从这句话确实看不懂,至少我并不知道 RNN 和它“所计算的函数”是如何定义的(有很多细节会影响结论是否成立、结论是否令人意外)。

看这篇应该就明白了 https://www.sciencedirect.com/science/article/pii/089396599190080F

另外,这并不是 Turing 完备的“解释”,这句话是在利用 Turing 完备的词义,而不是在告诉你 Turing 完备的词义。(类比:这家火锅很辣,这句话没有在解释什么是“辣”,而是在利用“辣”的意思给那家火锅下判断。)
2022-06-12 02:06:37 +08:00
回复了 codingBug 创建的主题 问与答 有没有可能直接将网络盘挂载为本地磁盘?
在 This PC (也就是 Computer / My Computer )里的 Compute 额 选项卡点 Map Network Drive ,输入地址就可以了。

除了 UNC 路径(如 \\server\share ),也可以用 HTTPS ,比如 OneDrive 是 https://d.docs.live.net/ 后面跟上你的 CID 。在 Office 系列应用里,如果你让 Office 处理 OneDrive 同步,打开 OneDrive 同步的文件后另存为,出现的默认地址也是这个。
1 ... 24  25  26  27  28  29  30  31  32  33 ... 173  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3090 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 48ms · UTC 12:14 · PVG 20:14 · LAX 05:14 · JFK 08:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.