- 主题:不是很懂string_view的点
第一个。编译器会用寄存器传值。第二个的话还要多一次内存访问去找到之前string的地址。
【 在 ziqin 的大作中提到: 】
: ok,那第二个问题是,我该用
: f( std::string_view s)
: 还是
: ...................
--
FROM 73.71.159.*
未必啊。如果有另外一个atomic flag做synchronization是正常定义的行为。
【 在 here080 的大作中提到: 】
: 你说的这种行为,有可能编译器不需要保证它的正常运行。这就是UB的意思。
--
FROM 73.71.159.*
嗯。我的point是,这样写程序未必有问题。
【 在 here080 的大作中提到: 】
: 这需要你在此函数内加上sync相关的代码。
--
FROM 73.71.159.*
我其实不明白你为什么一直假定没有synchronization。传值就是传值,传引用就是传引用。和synchronization有什么关系吗?
咱们拿个例子讨论下吧。就讨论有synchronization的情况。以下spin有什么问题?
void myprint(const std::string& str, std::atomic_bool &ready) {
while (!ready.get()) {}
std::cout << str << std::endl;
}
int main() {
std::string str;
std::atomic_bool ready(false);
std::thread t(myprint, std::cref(str), std::ref(ready));
str = "I'm ready";
ready.store(true);
t.join();
}
【 在 here080 的大作中提到: 】
: 加上了相关sync代码时编译器不优化和不加时编译器不优化是两个问题。不能用这个证明那个。
: 另外,这样写程序不管能不能跑,这个写法肯定是很有问题的。
--
修改:winterchill FROM 73.71.159.*
FROM 73.71.159.*
第一个参数。const string&。你要改成const int&也好。
【 在 here080 的大作中提到: 】
: 我们讨论的是const int&啊
: 你这都改成atomic_bool了……
: 怎么不改成const shared_ptr<>& ?
--
FROM 73.71.159.*
说实话我觉得“当然”这个词用的很不当然。你当时说“UB”的时候也没这么多限定。当然后面有什么样的后续讨论你也都可以用“当然”多加限定。我觉得说到这也没什么好争的了。
【 在 here080 的大作中提到: 】
: 当然是说传进的参数就是一个const int&,函数内部也没有用到复杂类的情况。
:
--
FROM 73.71.159.*
我对优化的部分没什么异议。我就是觉得UB这个说法有问题。言之有物的讨论我欢迎。其余的我就不说了。
【 在 here080 的大作中提到: 】
: 你可以没有看完整的贴子?我们最初讨论的是优化问题。
--
FROM 73.71.159.*