当我在学校时,教授们把它敲进了我的脑海,同事们在代码审查中跳了起来,而且几乎所有的C++教科书都在那里:"访问者"(又名"选择器"或"getter")方法必须被标记const.如果它没有改变或改变数据,则标记它const.
为什么?如何调用访问者来修改私有数据?
在下面的示例中,我设置了一个简单的类和一个访问器.如何getBrand()用于修改私有数据?在我眼里,它不能; 那么我们为什么需要标记呢const?
换句话说,我是否正确地说getBrand()在实践中不可能改变私有财产?
例:
#include <iostream>
#include <string>
class Cheese {
public:
Cheese(std::string brand):brand_(brand) {}
std::string getBrand() { return brand_; } // Intentionally not marked const
private:
std::string brand_;
};
int main() {
Cheese cheddar("Cabot clothbound");
std::cout << "Brand: " << cheddar.getBrand() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在 C++ 中,main()函数被标准化为类型int,因此应该return(0)可以成功执行。此外,程序通常会在最后打印一个换行符来刷新stdout,如下所示:
最小的、完整的、可验证的示例
hello_world.cpp
#include <iostream>
int main() {
std::cout << "hello, world" << std::endl;
printf("\n");
return(0);
}
Run Code Online (Sandbox Code Playgroud)
你好,世界
是否有等效的方法来正确退出 Python 脚本?还打印换行符,然后显式退出代码 0 是否有意义?
你好世界.py
import sys
print("hello, world")
print('\n')
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)
你好,世界
Tyvm :^)
我正在播放视频MPMoviePlayerController.在以下情况中,我得到一个黑屏,不响应控件上的点击:
所有其他控件按预期工作.
请注意,长按快进和快退确实可以正常工作.
我确实在下面的链接中查看了文档.有用户何时向前和向后寻求的通知(例如,长期持有); 分别MPMoviePlaybackStateSeekingForward和MPMoviePlaybackStateSeekingBackward.话虽如此,搜索按钮上没有simple_tap_的通知.
链接是" 这里 ".
为了完整性,这里是我用来调用播放器的代码.没有什么不寻常的; 当视频结束(观察MPMoviePlayerPlaybackDidFinishNotification)时,我倒回到开头.
NSString *path = [[NSBundle mainBundle] pathForResource:@"catSleeping" ofType:@mp4"];
_videoPlayer = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL fileURLWithPath:path]];
[_videoPlayer prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:_videoPlayer];
_videoPlayer.controlStyle = MPMovieControlStyleFullscreen;
_videoPlayer.shouldAutoplay = YES;
[self.view addSubview:_videoPlayer.view];
[_videoPlayer setFullscreen:YES animated:YES];
[_videoPlayer play];
}
- (void) moviePlayBackDidFinish:(NSNotification*)notification {
MPMoviePlayerController *player = [notification object];
player.currentPlaybackTime = 0.1;
[player stop];
[player play];
[player pause];
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
tyvm Keith …
是否有可用的课程可以告诉我手表是否已与设备配对?
我只是在寻找一个简单的是/否检查,它会告诉我手表是否与设备配对。
我正在研究经典的"反向字符串"问题.
对交换空间使用空终止符的位置是个好主意吗?这个想法是保存一个变量的声明.
具体来说,从Kernighan和Ritchie的算法开始:
void reverse(char s[])
{
int length = strlen(s);
int c, i, j;
for (i = 0, j = length - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
Run Code Online (Sandbox Code Playgroud)
......我们可以改为做以下事吗?
void reverseUsingNullPosition(char s[]) {
int length = strlen(s);
int i, j;
for (i = 0, j = length - 1; i < j; i++, j--) {
s[length] = s[i]; // Use last position instead of a new var …Run Code Online (Sandbox Code Playgroud) Xcode 7.2.1编译器.
为什么这不会编译?我希望第二行可以推断出类型,但是我发布了错误.谢谢.
int square(int);
template <typename T>
T square(T x) { return x * x; }
int main() {
cout << square<int>(2) << endl; //Compiles, works
cout << square(2) << endl; // Error below!?
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在阅读Swift文档,并挂断了我认为文档不一致的内容.
在if语句中,条件必须是布尔表达式 - 这意味着诸如得分{...}之类的代码是错误,而不是与零的隐式比较.
因此严格的"布尔"将为TRUE或FALSE.
您可以使用if和let一起使用可能缺少的值.这些值表示为选项.可选值包含值或包含nil以指示缺少值.在值的类型后面写一个问号(?)以将值标记为可选
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
如果可选值为nil,则条件为false
因此,通过"布尔",它们似乎意味着"truthy/falsy",因为nil隐含地意味着错误
并跳过括号中的代码.否则,将解包可选值并在let之后将其分配给常量,这使得在代码块内可用的展开值.
所以这里是我看到不一致的地方.在上面的代码示例中,由于optionalName具有值,因此该name变量被赋值为"John Appleseed".
因此,在比较中,我们最终得到了非布尔的表达 ; 特别是,"John Appleseed." 这是"真实的",但不是布尔值,这与第1点相矛盾!
换句话说 - 在代码中 - 在let中赋值后,我们有:
if "John Appleseed" {
greeting = "Hello, \(name)"
} …Run Code Online (Sandbox Code Playgroud) 关于在C++中重载括号,我的编译器使用mutator方法进行访问.谁能告诉我为什么?
1. const int & Cheese::operator [] (int i)const { return weight[i]; } //accessor
2. int & Cheese::operator [] (int i) { return weight[i]; } //mutator
Run Code Online (Sandbox Code Playgroud)
例如,下面的cout命令使用mutator函数定义 - 上面的#2 - 来访问数据.
Cheese cheddar;
cout << cheddar[2] << endl;
Run Code Online (Sandbox Code Playgroud)
为什么这不使用第一个函数 - 访问器 - 来获取数据?我认为,因为cout只是一个检索,它会在第一个开始.
编译器如何知道调用哪些内容?
编辑:为了完整性,通过mutator,我的意思是用作"setter",就像这样:
cheddar[2] = 100;
Run Code Online (Sandbox Code Playgroud)
两者合在一起如下:
cheddar[2] = cheddar[1];
Run Code Online (Sandbox Code Playgroud)
rhs只是一个"吸气剂".它只是检索cheddar [1]的值,不会改变任何东西,因此可以是const.相比之下,lhs括号过载切达[2]起到"定位器"的作用.值可以改变,函数返回值不能是常量.
尝试将关键字定义PURE为const集0,以用作抽象数据类型的类的标识符.为什么不编译?Per Meyers在"Essential C++,topic 1"中,我更喜欢使用const而不是#define,就像这样:
const int PURE = 0;
virtual void myFunction() = PURE;
Run Code Online (Sandbox Code Playgroud)
唉,这会引发错误(在Apple LLVM 7.0和gcc上也是如此):
Initializer on function does not look like pure-specifier
Run Code Online (Sandbox Code Playgroud)
下面是一个例子,标有A,B和C三种技术;
1. const int PURE = 0 will not compile
2. #define PURE 0 compiles and runs fine
3. Simply setting function = 0 (Stroustrup) works fine.
Run Code Online (Sandbox Code Playgroud)
它现在设置使用const解决方案,因此不会编译.简单地评论/取消注释第4,5,11和12行,以检查三种不同的方法:
#include <iostream>
#include <string>
const int PURE = 0; // Case B
// #define PURE 0 // Case C …Run Code Online (Sandbox Code Playgroud) 尝试在 React 功能组件中建立 WebSocket 连接,并使用钩子更新状态变量,如下所示 [参考 1]:
export default function foo() {
const [ arr, setArr ] = useState([])
ws = useRef(null)
useEffect( () => {
ws.current = new Websocket('ws://example.com:1234')
ws.current.onmessage = (m) => {
setArr([...arr, m])
})
}, []) // Runs once at mount
}
Run Code Online (Sandbox Code Playgroud)
的状态arr未保留。它被覆盖。
注意我也尝试传递arr到效果中,就像这样,但这导致了无限循环。[参考文献 2]。随着 arr 的更新,效果被称为...
})
}, [arr])
}
Run Code Online (Sandbox Code Playgroud)
举一个更具体的例子,取三个 websocket 消息:
['a']
['b']
['c']
Run Code Online (Sandbox Code Playgroud)
更新后每条消息的预计到达时间
['a']
['a', 'b']
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
结果:
['a']
['b']
['c']
Run Code Online (Sandbox Code Playgroud)
为什么不与回调中的钩子arr一起存储? …
c++ ×5
ios ×2
accessor ×1
apple-watch ×1
brackets ×1
conditional ×1
const ×1
exit ×1
freeze ×1
getter ×1
javascript ×1
let ×1
mutators ×1
objective-c ×1
oop ×1
optional ×1
overloading ×1
pure-virtual ×1
python ×1
python-3.x ×1
react-hooks ×1
reactjs ×1
return ×1
reverse ×1
state ×1
string ×1
swift ×1
templates ×1
websocket ×1
xcode6 ×1